【问题标题】:xsl for-each outputs all data rather than one at a timexsl for-each 输出所有数据而不是一次输出一个
【发布时间】: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"

标签: xml xslt


【解决方案1】:

现在我认为发生的是 for-each 案件,每件事情都在循环整个部分而不是个别案件,但是 我很难找出原因。

xsl:for-each 指令的内容模板中的上下文是 Case 元素,但您的 xsl:value-of 指令使用绝对位置路径 (/All/Cases/Case/extension-fields/extension-field[@display-text = 'whatever']/value)。对于任何不考虑当前上下文节点的输入源,这将始终具有相同的结果,因为...它是一个absolute location path

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2014-07-14
    • 1970-01-01
    • 2021-10-10
    • 2018-02-27
    相关资源
    最近更新 更多