2016-08-03 1 views
0

У нас есть входной XML. Мы пытаемся удалить такие элементы, которые имеют пустые и непустые значения. у нас есть <Item> как повторяющийся элемент. <TermsCode> имеет пустые и непустые значения для повторяющегося элемента.XSLT: проверьте, пусто ли значение, затем удалите тег

Мы должны удалить пустой тег <TermsCode> после проверки в XSLT, если он пуст. или если он имеет значение, он должен хранить тег. Аналогично, мы пытаемся написать для каждого элемента, связанного с узлом элемента. если он пуст, то удалите. если нет, то следует сохранить тег в Output XML.

ВХОДА 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> 

ПРОБОВАЛИ 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

Чтобы удалить эми ти 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())]"/> 
+0

Благодарности. Я применил к env . он работает для нас. – NEO