XSLT:检查值是否为空,然后删除标记

时间:2016-08-03 10:12:58

标签: xml xslt xslt-2.0

我们有输入XML。我们正在尝试删除那些具有空值和非空值的元素。我们将<Item>作为重复元素。 <TermsCode>具有重复项的空值和非空值。

我必须在检查XSLT后删除这样的<TermsCode>空标记,如果它是空的。或者如果它有价值,它应该保留标签。 同样,我们正在尝试为项目节点中涉及的每个元素编写。如果是空的则删除。如果没有,那么应该将标记保存在输出XML中。

INPUT XML

<?xml version="1.0" encoding="UTF-8"?>
<SetupArCustomer>
   <Item>
      <Key>
         <Customer>0039069</Customer>
      </Key>
      <Name>ABC SOLUTIONS LLC</Name>
      <CreditLimit>0.0</CreditLimit>
      <PriceCode>WH</PriceCode>
      <Branch>NY</Branch>
      <TermsCode>00</TermsCode>
      </Item>
   <Item>
      <Key>
         <Customer>0039070</Customer>
      </Key>
      <Name>CCD WHOLESALE NY INC.</Name>
      <CreditLimit>0.0</CreditLimit>
      <PriceCode>HY</PriceCode>
      <Branch>NY</Branch>
      <TermsCode/>
     </Item>
   </SetupArCustomer>

TRIED XSLT2.0

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xml" encoding="Windows-1252" indent="yes" />
  <xsl:template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" match="@xsi:nil[.='true']" />
  <xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

预期输出

<?xml version="1.0" encoding="UTF-8"?>
    <SetupArCustomer>
       <Item>
          <Key>
             <Customer>0039069</Customer>
          </Key>
          <Name>ABC SOLUTIONS LLC</Name>
          <CreditLimit>0.0</CreditLimit>
          <PriceCode>WH</PriceCode>
          <Branch>NY</Branch>
          <TermsCode>00</TermsCode>
          </Item>
       <Item>
          <Key>
             <Customer>0039070</Customer>
          </Key>
          <Name>CCD WHOLESALE NY INC.</Name>
          <CreditLimit>0.0</CreditLimit>
          <PriceCode>HY</PriceCode>
          <Branch>NY</Branch>
         </Item>
       </SetupArCustomer>

1 个答案:

答案 0 :(得分:1)

删除空的TermsCode元素:

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

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="TermsCode[not(node())]"/>

</xsl:stylesheet>

要删除 Item的任何空子元素,请更改:

<xsl:template match="TermsCode[not(node())]"/>

为:

<xsl:template match="Item/*[not(node())]"/>