• λ我爱Aspx >> Asp.Net >> 如何在XSL中得到某节点到根节点的全路径的所有节点?
  • 如何在XSL中得到某节点到根节点的全路径的所有节点?

  • :aspxer  Դ:internet  :2007-5-15 20:46:31  ؼ:
  • 要在XSL中得到某节点到根节点的带全部路径的节点,可以对该节点的路径进行copy,包括所有节点类型。下面就是具体实现的例子。

    GetFullPathNodes.XML

    <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="getfullpathnodes.xsl"?> <data> <x1/> <x2> <x21> <x211>x211</x211> <x212>x212</x212> <x213>孟子E章</x213> </x21> </x2> <x3> <x31/> </x3> </data>

    GetFullPathNodes.xsl

    <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="xml" version="1.0" omit-xml-declaration="yes"/> <!-- 确定哪个节点将被与祖先节点一起复制 --> <xsl:variable name="mynodes" select="//x211"/> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="*"> <xsl:if test="$mynodes[count(ancestor::*) = count(ancestor::* | current())] or count(.| $mynodes) = count($mynodes)"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:if> </xsl:template> <xsl:template match="text() | comment() | processing-instruction()"> <xsl:copy/> </xsl:template> </xsl:stylesheet>

    结果将象下面所示:

    <data> <x2> <x21> <x211>x211</x211> </x21> </x2> </data>

    为了看到真实的结果,可以用JavaScript程序来进行验证:

    var xmldom = new ActiveXObject("Msxml2.DOMDocument") xmldom.async = false xmldom.load("GetFullPathNodes.xml") var xsldom = new ActiveXObject("Msxml2.DOMDocument") xsldom.async = false xsldom.load("GetFullPathNodes.xsl") alert(xmldom.transformNode(xsldom))

    上一篇: 利用XSL对XML数据进行加密和大小写转换

    下一篇: XSL中几个封装的函数

    Ҷƪл˵?
  • һƪ在XSL中得到任意节点在DOM树中的深度
    һƪ利用XSL对XML数据进行加密和大小写转换