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



这个问题的主题可能不正确,因为我是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代码的一小部分。

使用此

<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>
<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="a:TransactionReferenceNumber">
    <TxId>
        <xsl:value-of select="."/>
        <xsl:text>&#xa;</xsl:text>
    </TxId>
</xsl:template>
<xsl:template match="a:ExecutingEntityIDCode">
    <ExctgPty>
        <xsl:value-of select="."/>
        <xsl:text>&#xa;</xsl:text>
    </ExctgPty>
</xsl:template>
</xsl:stylesheet>

我会

  • 使用XSL:apply-templates代替XSL:for-east
  • 利用默认模板将穿越整个XML树,除了属性
  • 仅针对元素编写模板:TransActionReferenceNumber和答:执行限制码以更改元素名称并添加行供稿字符。

最新更新