XSL节点遍历

时间:2010-11-09 18:05:34

标签: xml xslt xpath

我正在创建一个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>

我能够毫无问题地获得<Item>节点。我遇到的挑战是弄清楚如何查找<ColourType>节点以及<Colour>节点。

我的部分XSL看起来像:

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

这给了我<Item>节点,但我对如何导航或查找<ColourType>节点感到困惑。

你能帮助我吗?

谢谢,

凯文

2 个答案:

答案 0 :(得分:1)

应该是

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

答案 1 :(得分:0)

这是常见问题解答:每当有交叉引用时,您应该使用密钥

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

  

密钥提供了一种使用方式   包含隐式的文档   交叉引用结构。 ID,   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表达式为您的上下文Colour选择Item

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