【发布时间】:2011-12-02 08:41:28
【问题描述】:
背景
使用唯一标识符从 XML 元素列表中获取值。
问题
给定一个 XML 文档的格式:
<root xmlns:r="http://internet.com/network">
<r:equipment label="network">
<r:item id="1">computer</r:item>
<r:item id="2">network cable</r:item>
</r:equipment>
<r:equipment label="peripheral">
<r:item id="3">printer</r:item>
<r:item id="4">USB cable</r:item>
</r:equipment>
<r:install>
<r:step action="identify"><r:item id="1" />, <r:item id="2" />, <r:item id="3" />, and <r:item id="4" /></r:step>
<r:step action="unplug"><r:item id="2" /> from <r:item id="1" /></r:step>
<r:step action="plug"><r:item id="4" /> into <r:item id="3" /></r:step>
<r:step action="plug"><r:item id="4" /> into <r:item id="1" /></r:step>
</r:install>
</root>
目标是产生以下内容:
- 识别计算机、网络电缆、打印机和 USB 电缆
- 从计算机上拔下网线
- 将 USB 数据线插入打印机
- 将 USB 数据线插入计算机
我尝试了以下方法:
<xsl:template match="r:install">
<p>
Installation
</p>
<ol>
<xsl:for-each select="r:step">
<li><xsl:apply-templates select="." /></li>
</xsl:for-each>
</ol>
</xsl:template>
<xsl:template match="//root/r:install/r:step/r:item">
ID: <xsl:value-of select="@id" />
</xsl:template>
换句话说,我想匹配<r:install>,然后使用来自任何<r:item ... /> 元素的id 属性。每个<r:step /> 可以有多个<r:item id="X" /> 引用。这些引用对应于<r:equipment ../> 元素列表中的<r:item>...</r:item> 元素。
每个<r:item /> 的id 值保证是唯一的。
如果可能,我想避免使用额外的标签(例如,<r:item-ref id="X" />)。
问题
给定<r:install><r:step action="unplug"><r:item id="4" /></r:step></r:install> 和以下列表:
<r:equipment label="peripheral">
<r:item id="3">printer</r:item>
<r:item id="4">USB cable</r:item>
</r:equipment>
当在 XML 文档中的任何位置应用一个模板命中 <r:item id="4" />(用作对所述值的引用)时,对应的 select XPath 表达式是什么来获取 USB cable 的值?
谢谢!
【问题讨论】: