如果节点和子元素只出现一次,请复制它



我需要复制一个节点及其子元素,如果它在 xml 中只出现一次。否则,不应修改 XML。例如,在下面的 xml 中,如果<dataList>只出现一次,则再复制一次。如果没有,则根本不要更改 xml。请只有 XSLT 1.0

Input XML
 <?xml version="1.0" encoding="UTF-8"?>
<API>
   <Token/>
   <root>
     <dataList>
        <addressOne>1</addressOne>
        <addressTwo/>
        <bkdn/>
     </dataList>
   </root>
 </API>

预期的输出 xml

<?xml version="1.0" encoding="UTF-8"?>
 <API>
   <Token/>
   <root>
      <dataList>
         <addressOne>1</addressOne>
         <addressTwo/>
         <bkdn/>
      </dataList>
      <dataList>
         <addressOne>1</addressOne>
         <addressTwo/>
         <bkdn/>
       </dataList>
     </root>
</API>

根据我的理解,我想解决它:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="1.0">
    <xsl:output indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="root">
        <xsl:copy>
        <xsl:choose>
            <!-- If you are looking for the dataList occurance then use count -->
            <xsl:when test="count(dataList) = 1">
            <!-- If you are looking for the dataList/addressOne value = 1 occurance then use below -->
        <!-- <xsl:when test="dataList/addressOne=1"> -->
                <xsl:apply-templates select="dataList"/>
                <xsl:apply-templates select="dataList"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:apply-templates select="dataList"/>
            </xsl:otherwise>
        </xsl:choose>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新