我正在创建一个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>
节点感到困惑。
你能帮助我吗?
谢谢,
凯文
答案 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)