【问题标题】:How select parent of node in any level with its attribute如何选择具有属性的任何级别的节点的父级
【发布时间】:2016-05-30 09:20:58
【问题描述】:

我执行 XSLT 转换并在模板中使用 XPATH 从 XML 中获取信息,此时,没有什么特别的,但是:

当我浏览“firstEngine”元素和浏览“Engine”时,我尝试获取节点“Aircraft”的 id " 元素(而不是 "engines" 元素)。 我搜索 XPATH 表达式以获取第一个父元素的“id”,其中“xsi:type”的值为“Jet”不管他父母的水平如何。

我尝试了这个表达式但没有成功:

../Aircraft[xsi:type="Jet"]/@id



<Aircraft xsi:type="Jet" id="4">
    <MTOW>0</MTOW>
    <firstEngine>
        <nbFans>2</nbFans>
        <name>turbofanengine</name>
    </firstEngine>
    <engines>
        <Engine>
            <nbFans>2</nbFans>
            <name>turbofanengine</name>
        </Engine>
    </engines>
    <name>jet</name>
</Aircraft>

编辑:#michael.hor257k 你的表达效果很好,我使用 Editix 来测试 xpath 表达式,它似乎有问题,我必须重新启动 editix 才能使其工作。 谢谢你!

【问题讨论】:

  • "不管他的父节点的级别。" 父节点的级别总是比当前节点高一级。也许你的意思是祖先

标签: xml xslt xpath


【解决方案1】:

你想用:

ancestor::Aircraft/@id

这将适用于Aircaft任何后代的上下文。

我省略了[@xsi:type="Jet"] 谓词,因为一个节点似乎不可能有多个Aircaft 祖先。但这只是我的猜测。

【讨论】:

    【解决方案2】:

    您想选择一个属性,所以../Aircraft[xsi:type="Jet"]/@id 应该是../Aircraft[@xsi:type="Jet"]/@id。这应该适用于&lt;xsl:template match="firstEngine"&gt;&lt;xsl:value-of select="../Aircraft[@xsi:type="Jet"]/@id"/&gt;&lt;/xsl:template&gt;。对于其他元素,您需要 ../../Aircraft[@xsi:type="Jet"]/@id1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多