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

我怎么能复制所有XML没有<documents xsi:nil="true"/>或没有xsi:nil =“true”?

所需的输出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> 

说明:

  1. 第一个模板 – “ 标识模板” – 按原样从源XML文档复制所有节点和属性。
  2. 第二个模板匹配具有指定的,名称空间属性等于“真”的所有元素,有效地删除这些元素。