以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  在XSLT中如何获得节点的XML文本?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=83831)


--  作者:lifegame
--  发布时间:3/14/2010 8:58:00 PM

--  在XSLT中如何获得节点的XML文本?
在XSLT中如何获得节点的XML文本?

比如我们可以用<xsl:value-of select="/root/a"/>来获得a节点的值,
或者用<xsl:copy-of select="/root/a"/>把a节点及其子节点拷贝过来,
但如何实现类似XMLDOM中的outerXML的功能,即获得该节点的XML文本?

比如原始的XML是:

<root>
<a>
  <b>hello world</b>
</a>
</root>

我们期望的目标XML是:

<result>
<node>&lt;a&gt;&lt;b&gt;hellow world&lt;/b&gt;</node>
</result>


--  作者:Qr
--  发布时间:3/14/2010 9:44:00 PM

--  
XSL中没有类似XMLDOM中的outerXML的方法函数,要实现此转换,得用命名模板递归实现。
--  作者:lifegame
--  发布时间:3/21/2010 4:14:00 PM

--  
谢谢。我查了以下命名模板,写起来好像很不优美,而且真要做起来,好像也很复杂。最后我还是用代码实现了,即从XSLT里面调用C#的代码。感觉这样比较彻底,将来再有类似问题,就没必要在XSLT里面纠缠太多了。而且在C#上多下点功夫,也能实现运行时动态编译。
--  作者:jj_long
--  发布时间:4/30/2010 12:26:00 AM

--  
以下是XSLT代码实现:


<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <result>
  <node>
   <xsl:apply-templates/>
  </node>
 </result>
</xsl:template>


<xsl:template match="root/*">
 <xsl:text disable-output-escaping="no">&lt;</xsl:text><xsl:value-of select="name()"/><xsl:text disable-output-escaping="no">&gt;</xsl:text>
 <xsl:apply-templates/>
 <xsl:text disable-output-escaping="no">&lt;/</xsl:text><xsl:value-of select="name()"/><xsl:text disable-output-escaping="no">&gt;</xsl:text>
</xsl:template>

</xsl:stylesheet>


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