您的位置:首页 > 其它

如何在XSL中得到某节点到根节点的全路径的所有节点?

2007-08-08 17:39 281 查看
要在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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: