XSLT_1-从几个不同的来源获得第二个元素

时间:2019-01-23 20:39:36

标签: xslt-1.0

我有两个不同的输入文件,它们将由一个xslt处理。如何从第一个输入获取第二个子元素“节点”段,从第二个输入获取第二个“组”元素段。

第一个输入文件的示例:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <node>
    <count>1</count>
    <value>111</value>
  </node>
  <node>
    <count>2</count>
    <value>222</value>
  </node>
  <node>
    <count>3</count>
    <value>333</value>
  </node>
</root>

第二个输入文件的示例:

<?xml version="1.0" encoding="utf-8"?>
    <root>
      <group>
        <count>1</count>
        <value>111</value>
      </group>
      <group>
        <count>2</count>
        <value>222</value>
      </group>
      <group>
        <count>3</count>
        <value>333</value>
      </group>
    </root>

下面的脚本不起作用。您能帮忙解决它吗?

<xsl:template match="*[local-name()= 'root']">

    <xsl:variable name="unknown">
      <xsl:if test="normalize-space(*[2]) = 'node'">
        <xsl:value-of select="*[local-name()= 'node'][2]"/>
      </xsl:if>
      <xsl:if test="normalize-space(*[2]) = 'group'">
        <xsl:value-of select="*[local-name()= 'group'][2]"/>
      </xsl:if>
    </xsl:variable>

    <xsl:copy-of select="$unknown"/>

  </xsl:template>

预期输出为:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <node>
    <count>2</count>
    <value>222</value>
  </node>
</root>

<?xml version="1.0" encoding="utf-8"?>
<root>
  <group>
    <count>2</count>
    <value>222</value>
  </group>
</root>

谢谢你, 大流士

1 个答案:

答案 0 :(得分:1)

怎么样:

<xsl:template match="/root">
    <xsl:copy>
        <xsl:copy-of select="*[2]"/>
    </xsl:copy>
</xsl:template>

或:

<xsl:template match="/root">
    <xsl:copy>
        <xsl:copy-of select="(node|group)[2]"/>
    </xsl:copy>
</xsl:template>