2016-08-03 9 views
0

Wir haben Input XML. Wir versuchen, solche Elemente zu entfernen, die leere und nicht leere Werte haben. wir haben <Item> als wiederholtes Element. <TermsCode> hat leere und nicht leere Werte für wiederholte Artikel.XSLT: Überprüfen Sie, ob der Wert leer ist, und entfernen Sie dann das Tag

Wir müssen solche <TermsCode> leeren Tag nach dem Einchecken XSLT entfernen, wenn es leer ist. oder wenn es Wert hat, sollte es das Tag behalten. In ähnlicher Weise versuchen wir, für jedes Element zu schreiben, das in Elementknoten involviert ist. Wenn es leer ist, entfernen Sie es. Wenn nicht, sollte das Tag in Ausgabe-XML beibehalten werden.

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> 

Erwartete Ausgabe

<?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> 

Antwort

1

emp entfernen ty TermsCode Elemente:

<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> 

jeden leer geordnetes Element von Item, ändern zu entfernen:

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

zu:

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

Dank. Ich habe auf env angewendet. es funktioniert für uns. – NEO

Verwandte Themen