【问题标题】:XSL Node TraversalXSL 节点遍历
【发布时间】:2010-11-09 18:05:33
【问题描述】:

我正在创建一个 XSL 文档,该文档将用于基于 XML 文件创建一些 HTML。我对 XML/XSL 世界很陌生,我什至在问正确的问题时都在苦苦挣扎。以下是 XML 文件的粗略表示:

<Item elemID="1" material="oak"></Item>
<Item elemid="2" material="cedar"></Item>
<Item elemid="3" material="spruce"></Item>
<ColourType primary_object="1" secondary_object="100"></ColourType>
<ColourType primary_object="2" secondary_object="101"></ColourType>
<ColourType primary_object="3" secondary_object="102"></ColourType>
<Colour id="100" name="Blue"></Colour>
<Colour id="101" name="Red"></Colour>
<Colour id="102" name="Yellow"></Colour>

我能够毫无问题地获得&lt;Item&gt; 节点。我面临的挑战是弄清楚如何查找&lt;ColourType&gt; 节点和&lt;Colour&gt; 节点。

我的部分 XSL 看起来像:

<xsl:variable name="ItemRef" select="//tcplm:Item/tcplm:GSIdentity[@elemId=$occrid]"/>

这给了我&lt;Item&gt; 节点,但我不知道如何导航或查找&lt;ColourType&gt; 节点。

你能帮帮我吗?

谢谢,

凯文

【问题讨论】:

  • 有人可以帮我插入我的示例 XML 文件吗?当我保存我的帖子时,它似乎已被删除。
  • 完成,但您可以在插入代码或标签时使用代码按钮。选择代码/标签,然后单击上面带有 01 的按钮..
  • 你想要达到的目标 html 是什么?
  • @Gaby,感谢您帮助插入代码。我最终希望获得 Name 属性。

标签: xml xslt xpath


【解决方案1】:

应该是这样的

<xsl:variable name="clr" select="//Colour[@id=//ColourType[@primary_object=$occrid]/@secondary_object]/@name" />

【讨论】:

    【解决方案2】:

    这是常见问题解答:只要有交叉引用,您就应该使用键

    来自http://www.w3.org/TR/xslt#key

    键提供了一种使用方式 包含隐式的文档 交叉引用结构。身份证, IDREF 和 IDREFS 属性类型在 XML 提供了一种机制来允许 XML 使他们的文件 交叉引用显式。 XSLT 通过 XPath id 支持这一点 功能。

    假设这些键声明:

    <xsl:key name="kColourTypeByPrimary" match="ColourType" use="@primary_object"/>
    <xsl:key name="kColourById" match="Colour" use="@id"/>
    

    然后您可以使用此 XPath/XSLT 表达式为您的上下文 Item 选择 Colour

    key('kColourById',key('kColourTypeByPrimary',@elemid)/@secondary_object)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多