如何使用XSLT循环使用XML中的元素

时间:2017-12-01 05:27:10

标签: xml xslt

这个问题的主题可能不正确,因为我是XSLT的新手。我将尝试用一个例子来解释。我有以下XML

<?xml version="1.0" encoding="UTF-8"?>

<Recordset Name="Report" xmlns="http://pia.com/xml/ns">
    <Record>
        <TransactionReferenceNumber>T00005546</TransactionReferenceNumber>
        <ExecutingEntityIDCode>724500LY73GPE4GDX159</ExecutingEntityIDCode>
    </Record>
    <Record>
        <TransactionReferenceNumber>P00098080</TransactionReferenceNumber>
        <ExecutingEntityIDCode>66666</ExecutingEntityIDCode>
    </Record>
</Recordset>

XLST:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:a="http://pia.com/xml/ns" 
          exclude-result-prefixes="a">
  <xsl:output method="xml" version="1.0" 
              encoding="UTF-8" omit-xml-declaration="no" indent="yes"  />
  <xsl:template match="/">
      <xsl:for-each select="/a:Recordset/a:Record">
          <TxId>
            <xsl:value-of select="/a:Recordset/a:Record/a:TransactionReferenceNumber"/>
          </TxId><xsl:text>&#xa;</xsl:text>
          <ExctgPty>
              <xsl:value-of select="/a:Recordset/a:Record/a:ExecutingEntityIDCode"/>
          </ExctgPty>
          <xsl:text>&#xa;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

具有所需的输出

<?xml version="1.0" encoding="utf-8"?>
<TxId>T00005546</TxId>
<ExctgPty>724500LY73GPE4GDX159</ExctgPty>
<TxId>P00098080</TxId>
<ExctgPty>66666</ExctgPty>

但我在两种情况下都获得了第一批数据。

<?xml version="1.0" encoding="utf-8"?>
<TxId>T00005546</TxId>
<ExctgPty>724500LY73GPE4GDX159</ExctgPty>
<TxId>T00005546</TxId>
<ExctgPty>724500LY73GPE4GDX159</ExctgPty>

我如何循环并获得所需的输出? 注意:这只是我正在使用的一小部分XML和XSLT代码。

2 个答案:

答案 0 :(得分:0)

使用此

<xsl:for-each select="/a:Recordset/a:Record">
        <TxId>
            <xsl:value-of select="a:TransactionReferenceNumber"/>
        </TxId><xsl:text>&#xa;</xsl:text>
        <ExctgPty>
            <xsl:value-of select="a:ExecutingEntityIDCode"/>
        </ExctgPty>
        <xsl:text>&#xa;</xsl:text>
    </xsl:for-each>
</xsl:template>

答案 1 :(得分:0)

{{1}}

我会

  • 使用xsl:apply-templates而不是xsl:for-each
  • 利用了将遍历除属性
  • 之外的整个XML树的默认模板
  • 仅为元素a:TransactionReferenceNumber和。编写模板 a:ExecutingEntityIDCode更改元素名称并添加换行符。