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

marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/images/b.html" frameborder="0" width="728" scrolling="no" height="90">

要在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)) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值