如何在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))
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))
相关文章推荐
- 无向图中节点的迭代得到从起始节点到结束节点之间的所有路径,并从中得到最短路径的节点
- 在Telerik for silverlight控件radtreeview中如何通过路径得到节点
- 在Telerik for silverlight控件radtreeview中如何通过路径得到节点(转载)
- 【编程语言】Android--如何遍历android所有路径
- 如何在c#中得到当前目录的路径
- 遍历树--得到某个节点下所有的最底层的节点数据
- 如何得到SQL Server的安装路径
- 求二叉树根节点到子节点和为某一值的所有路径(Java实现)
- 根据001002得到所有的路径
- 在XSL中得到任意节点在DOM树中的深度
- 题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶结点所经过的结点形成一条路径。
- 【转】libxml2 如何获得某个节点的所有信息
- 所有节点对最短路径
- sql如何根据父级Id得到所有下级的记录
- 每天一道LeetCode-----以字符串的形式输出二叉树所有从根节点到叶子节点的路径
- 如何在Ubuntu手机应用中得到所有的环境变量值
- 如何得到某集合的所有子集合?
- 如何得到数据库中所有表字段及字段中文描述
- 如何得到浏览器 DOM 对象的所有属性和方法
- 如何得到DataGridView当前记录的所有值