【发布时间】:2020-01-31 05:29:43
【问题描述】:
我想先说我对 XML/XSL 的经验为零,并且不熟悉我应该使用的术语。
我正在编写使用 xml 文件的代码。 xml 文件(我猜的重要部分)的格式如下:
<All>
<Cases>
<Case>
<extension-fields>
<extension-field display-text="whatever">
<value>X</value>
</extension-field>
</extension-fields>
</Case>
<Case>
<extension-fields>
<extension-field display-text="whatever">
<value>Y</value>
</extension-field>
</extension-fields>
</Case>
</Cases>
</All>
每个案例都有自己的一组扩展字段。
我正在尝试为我的每个案例提取单独的扩展字段值,其中 display-text = 'whatever'。我写这个的方式如下:
<xsl:for-each select="All/Cases/Case">
<w:tc>
<w:tcPr>
<w:tcW w:w="{$Col2}" w:type="dxa"/>
<w:vAlign w:val="top"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:jc w:val="right"/>
</w:pPr>
<w:r>
<w:t>
<xsl:value-of select="/All/Cases/Case/extension-fields/extension-field[@display-text = 'whatever']/value"/>
</w:t>
</w:r>
</w:p>
</w:tc>
</xsl:for-each>
(这被推到桌子的某个地方,我不确定它是否都相关,所以我只是展示了我遇到问题的整个部分)
我希望在输出中看到每个案例的单独值(因此每个案例编号旁边都有其 X 和 Y 值)但是相反,我看到每个案例旁边都有两个值 X Y .现在我认为正在发生的是 for-each 案件,每件事都在循环整个部分而不是个别案件,但我无法弄清楚原因。
【问题讨论】:
-
只是为了扩展@Alejandro's answer说:您在 for-each 中的选择应该相对于当前节点,而不是来自文档根的绝对选择。你想要
select="extension-fields/extension-field[@display-text = 'whatever']/value"