XSL选择第N个字段

时间:2018-07-19 16:36:48

标签: xml xslt

我是XSL的新手,并且有这个问题,所以我有这个XML

mdpi/hdpi/xhpi/xxhpdi

所以我想获取值test2,所以这是我的声明,它不起作用:

<a>  
  <b>
    <c1>
      <d>N1</d>
      <e>Test</e>
    </c1>
    <c1>
      <d>N1</d>
      <e>Test2</e>
    </c1>
   </b>
 </a>

1 个答案:

答案 0 :(得分:1)

您的源XML包含一些错误。

首先要纠正的是将<e>Test/<e>更改为<e>Test</e> (斜线应位于<之后,以形成结束标记。

然后在您的XSLT中查看<xsl:for-each select="//b/c1[2]">c1[2]表示您想要具有c1名称的 second 元素。

因此要更改的第二件事是将<c2> ... </c2>更改为 <c1> ... </c1>,因此您将拥有第二个c1元素。

因此,您的源XML应该如下:

<a>
  <b>
    <c1>
      <d>N1</d>
      <e>Test</e>
    </c1>
    <c1>
      <d>N1</d>
      <e>Test2</e>
    </c1>
  </b>
</a>

另一个重要的事情是您无法启动XSLT脚本 只需<xsl:for-each...

您必须以<xsl:stylesheet作为主要标签。

然后,例如在与/匹配的模板中,应放置 一些主要标签(我将其称为main,请参见下文),以及 在其中,可以放置您的for-each循环。

下一个更正与<xsl:if test="d = N1">有关。 将其更改为<xsl:if test="d = 'N1'">,因为N1是一个 字符串常量,而不是标签名称。

因此整个XSLT脚本可以是例如:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">
  <xsl:output indent="yes"/>

  <xsl:template match="/">
    <main>
      <xsl:for-each select="//b/c1[2]">
        <xsl:if test="d = 'N1'">
          <data>
            <xsl:value-of select="e"/>
          </data>
        </xsl:if>
      </xsl:for-each>
    </main>
  </xsl:template>
</xsl:stylesheet>

它给出:

<?xml version="1.0" encoding="UTF-8"?>
<main>
   <data>Test2</data>
</main>