【问题标题】:for-each in xsltxslt 中的 for-each
【发布时间】:2021-11-10 21:57:24
【问题描述】:

我需要循环我的根标签内的所有元素,比如

<?xml version="1.0" encoding="UTF-8"?>    
<root>
<mijnFamilyPack>
    <rt>id123</rt>
    <rt>id345</rt>
    <rt>id084</rt>
    <INPORTING>NO</INPORTING>
    <id>345</id>
</mijnFamilyPack>
</root>

我已经编写了 for-each 来获取所有“rt”元素值。但我可以单独使用第一个 cvalue。

<xsl:for-each select="/root/mijnFamilyPack/">
<xsl:value-of select="rt"/>
</xsl:for-each>

如何单独获取“rt”值?

【问题讨论】:

  • 我的 xml 代码有一点点变化。
  • 尽量发布完整的源 xml 和完整的 xsl 代码

标签: xml xslt


【解决方案1】:

您只有一个节点 mijnFamilyPack 的实例,因此 &lt;xsl:for-each select="/root/mijnFamilyPack/"&gt; 正在循环一次,您正在打印第一个 rt 节点的值。

您可能还想将rt 节点也放入您的for-each 并打印当前节点的值,如下所示:

 <xsl:for-each select="/root/mijnFamilyPack/rt">
       <xsl:value-of select="."/>
 </xsl:for-each>

如果您认为mijnFamilyPack 可能有多个节点,则使用嵌套循环,首先迭代mijnFamilyPack,然后在mijnFamilyPack 节点内迭代rt。

 <xsl:for-each select="/root/mijnFamilyPack/">
    <xsl:for-each select="rt">
       <xsl:value-of select="."/>
    </xsl:for-each>
 </xsl:for-each>

【讨论】:

    【解决方案2】:

    您选择的是mijnFamilyPack 节点,而不是rt 节点集:

    <xsl:for-each select="/root/mijnFamilyPack/rt">
       <xsl:value-of select="."/>
    </xsl:for-each>
    

    但请考虑使用实际模板而不是 for-each:

    <xsl:template match="/root/mijnFamilyPack/rt">
       <xsl:value-of select="."/>
    </xsl:template>
    

    【讨论】:

      【解决方案3】:

      就像 Oded 所说,您应该使用模板来匹配 rt 元素。 For-each 不应在此处使用(另请参阅此线程中的答案:For loops vs. apply-templates)

      如果将此 XSLT 应用于源 XML:

      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
      <xsl:template match="/">
          <list>
              <xsl:apply-templates select="//rt"/>
          </list>
      </xsl:template>
      
      <xsl:template match="rt">
          <rt>
              <xsl:value-of select="."/>
          </rt>
      </xsl:template>
      
      </xsl:stylesheet>
      

      你会得到想要的输出:

      <?xml version="1.0" encoding="UTF-8"?>
      <list>
      <rt>id123</rt>
      <rt>id345</rt>
      <rt>id084</rt>
      </list>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多