2012-08-08 15 views
5

मैं एक्सएमएलXSLT अवांछित तत्वों को दूर

<getInquiryAboutListReturn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <inquiryAbouts> 
     <inquiryAbout> 
      <code>Code</code> 
      <nameKk>Something</nameKk> 
      <nameRu>Something</nameRu> 
      <documents xsi:nil="true"/> 
     </inquiryAbout> 
    </inquiryAbouts> 
</getInquiryAboutListReturn> 

है और मैं सभी XML

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output indent="yes" /> 
    <xsl:template match="/"> 
     <xsl:copy-of select="//getInquiryAboutListReturn/inquiryAbouts"/> 
    </xsl:template> 
</xsl:stylesheet> 

मैं कैसे <documents xsi:nil="true"/> बिना या xsi के बिना सभी एक्सएमएल नकल कर सकता है कॉपी करने के लिए XSLT के साथ यह कार्रवाई करने के लिए करना चाहते हैं: शून्य = "true"?

वांछित उत्पादन एक्सएमएल

<getInquiryAboutListReturn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <inquiryAbouts> 
     <inquiryAbout> 
      <code>Code</code> 
      <nameKk>Something</nameKk> 
      <nameRu>Something</nameRu> 
     </inquiryAbout> 
    </inquiryAbouts> 
</getInquiryAboutListReturn> 
+1

क्या आप केवल <दस्तावेज xsi: nill = "true" /> को निकालने के लिए चाहते हैं, या @xsi: nil = "true" के साथ सभी तत्व चाहते हैं? यदि आप अपने अपेक्षित एक्सएमएल आउटपुट पोस्ट करते हैं तो यह सहायक हो सकता है। –

+0

मैं सभी तत्वों को @xsi: nil = "true" के साथ छोड़ना चाहता हूं। – Eldar

उत्तर

7

यह सरल XSLT:

<?xml version="1.0"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    version="1.0"> 

    <xsl:output omit-xml-declaration="no" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <!-- TEMPLATE #2 --> 
    <xsl:template match="*[@xsi:nil = 'true']" /> 

</xsl:stylesheet> 

... जब ओपी के स्रोत XML के लिए लागू:

<?xml version="1.0"?> 
<getInquiryAboutListReturn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <inquiryAbouts> 
    <inquiryAbout> 
     <code>Code</code> 
     <nameKk>Something</nameKk> 
     <nameRu>Something</nameRu> 
     <documents xsi:nil="true"/> 
    </inquiryAbout> 
    </inquiryAbouts> 
</getInquiryAboutListReturn> 

... पैदा करता अपेक्षित परिणाम एक्सएमएल:

<?xml version="1.0"?> 
<getInquiryAboutListReturn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <inquiryAbouts> 
    <inquiryAbout> 
     <code>Code</code> 
     <nameKk>Something</nameKk> 
     <nameRu>Something</nameRu> 
    </inquiryAbout> 
    </inquiryAbouts> 
</getInquiryAboutListReturn> 

व्याख्या:

  1. पहले टेम्पलेट - Identity Template - प्रतियां सभी नोड्स और स्रोत XML दस्तावेज़ से जिम्मेदार बताते हैं-के रूप में ।
  2. दूसरा टेम्पलेट, जो "सत्य" के बराबर निर्दिष्ट, नामांकित विशेषता वाले सभी तत्वों से मेल खाता है, प्रभावी रूप से उन तत्वों को हटा देता है।
+1

वह @xsi के साथ सभी तत्व चाहता है: nil = true ommitted, न केवल दस्तावेज़ तत्वों। –

+1

धन्यवाद, @ कॉलिन - मैं अपडेट करूंगा। – ABach

+0

यदि आप '' जोड़ते हैं, तो यह सभी 'xsi: nil को हटा देगा सही या गलत मूल्य के बावजूद –