以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  请教个问题关于XSL的 xsl:valueof select 部分的  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=49218)


--  作者:sports98
--  发布时间:6/29/2007 6:09:00 PM

--  请教个问题关于XSL的 xsl:valueof select 部分的
....
<vs title="ggg">
   7777777777<p>abc</p><br />44444
<vs>

.....
<xsl:template match="title">
  <xsl:value-of select="./text()" /> <!--这里如果我用 . 好像选出来的所有标记都没了,如果用text()则<p>以后的都没了,我如何选出vs中的数据,包括代码段  cdata() 也用了,说我错-->
</xsl:template>


--  作者:ioyichen
--  发布时间:6/30/2007 6:16:00 PM

--  
<xsl:copy-of>
--  作者:hexun831012
--  发布时间:6/30/2007 6:37:00 PM

--  
<xsl:copy-of>不行,他会输出<copy xmlns=""></copy>
应该用<xsl:value-of select="." disable-output-escaping="yes" />
--  作者:Qr
--  发布时间:7/1/2007 11:44:00 AM

--  
<xsl:copy-of>
因为有些浏览器不支持disable-output-escaping="yes",比如FF。
--  作者:hexun831012
--  发布时间:7/1/2007 4:58:00 PM

--  
其实也可以的,在FF中只能用脚本实现,比如
<xsl:if test="system-property('xsl:vendor') = 'Transformiix'">
 <script type="text/javascript">disableEscaping()</script>
</xsl:if>
function disableEscaping()
{
 var paragraphs = document.getElementsByTagName("p");
 for(var i = 0; i < paragraphs.length; i ++)
 {
  paragraphs[i].innerHTML = paragraphs[i].textContent;
 }
}
[此贴子已经被作者于2007-7-2 8:37:49编辑过]

--  作者:sports98
--  发布时间:7/2/2007 9:25:00 AM

--  
首先感谢楼上的各位作出的回答~


  对于 disable-output-escaping="yes"   我作了尝试。我使用的是FF(2.0.0.4版的),文本内容全部输出了~,只是好像内嵌的HTML标签被过滤了,不知道是不是FF的缘故。我在中间增加了<font><p><br><h1>等HTML标记
均未显示效果。另外就是一个新的现象了


XML code:
===============================
<vs>
   <font color="red">Hello </font><br />你好么?<a href="http://myblog.org">我的博客</a>
</vs>


XSL CODE:
=======
<xsl:template match="*/vs">
             <xsl:apply-templates select="a"/>
             <xsl:apply-templates select="font"/>
             <xsl:apply-templates select="p"/>
             <xsl:apply-templates select="br"/>
</xsl:template>

<xsl:template match="a">
          <a href="url.aspx?u={$href}">
              <xsl:value-of select="." />
          </a>
</xsl:template>

....
...
...
..


  求解一下疑惑


        疑惑一、  如果直接取  vs 一的 所有代码(包含HTML),如何操作。跟我楼顶帖问题相似,如果用 .|text() 均无法取出所有,如果使用2楼方法,可以将所有 <>标记意外的文档显示出来。但标记效果就被过滤了。


        疑惑二、如果不能实现疑惑一,我使用上面所编写的XSL进行数据提取格式的时候,我如何将VS中已经存在的提取标记给取消的。也就是原位置替换标签效果。


       初次接触XSL,时间不长,一直在努力学习


--  作者:Qr
--  发布时间:7/2/2007 9:51:00 AM

--  
实际上<xsl:copy-of>就是取得指定节点下的文本内容,包括HTML标记,只因浏览器的原因,输出到页面的内容只是文本而以。如果你要进行XML2XML转换,这个命令已经能够实现。


--  作者:sports98
--  发布时间:7/2/2007 10:05:00 AM

--  
刚实验了1楼的方法,使用通过

<xsl:copy-of select="." />

谢谢各位的回答。补充了不少基础知识~


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
109.375ms