Xml
XSLT 刪除不需要的元素
我有 XML
<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>
我想用 XSLT 處理它以複製所有 XML
<documents xsi:nil="true"/>
在沒有或沒有 xsi:nil=“true” 的情況下如何複製所有 XML ?所需的輸出 XML
<getInquiryAboutListReturn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <inquiryAbouts> <inquiryAbout> <code>Code</code> <nameKk>Something</nameKk> <nameRu>Something</nameRu> </inquiryAbout> </inquiryAbouts> </getInquiryAboutListReturn>
這個簡單的 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>
…當應用於 OP 的源 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:
<?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>
解釋:
- 第一個模板——身份模板——按原樣從源 XML 文件中複製所有節點和屬性。
- 第二個模板匹配所有具有指定命名空間屬性等於“true”的元素,有效地刪除了這些元素。