我正在研究一个XSLT,它需要复制保持相同结构的整个XML,并根据条件过滤掉某些节点。
在下面的示例中,我只需要保留IsBusinness = Y
的节点test
所需的输出
<CompanyTypes>
<Parent1>
<ChildNode1>Test</ChildNode1>
<ChildNode2>Test</ChildNode2>
<CompanyType>
<CompanyTypeID>1</CompanyTypeID>
<CompanyTypeName>Individual</CompanyTypeName>
<CompanyTypeDesc>Individual</CompanyTypeDesc>
<IsBusiness>N</IsBusiness>
</CompanyType>
</Parent1>
<Parent1>
<ChildNode1>Test1</ChildNode1>
<ChildNode2>Test</ChildNode2>
<CompanyType>
<CompanyTypeID>1</CompanyTypeID>
<CompanyTypeName>Individual</CompanyTypeName>
<CompanyTypeDesc>Individual</CompanyTypeDesc>
<IsBusiness>Y</IsBusiness>
</CompanyType>
</Parent1>
<Parent1>
<ChildNode1>Test3</ChildNode1>
<ChildNode2>Test9</ChildNode2>
<CompanyType>
<CompanyTypeID>1</CompanyTypeID>
<CompanyTypeName>Individual</CompanyTypeName>
<CompanyTypeDesc>Individual</CompanyTypeDesc>
<IsBusiness>Y</IsBusiness>
</CompanyType>
</Parent1>
</CompanyTypes>
答案 0 :(得分:0)
使用此
<!-- Identical Template to copy all structure -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- This template delete all CompanyType which node IsBusinness != Y -->
<xsl:template match="Parent1[CompanyType/IsBusiness != 'Y']"/>
请参见https://xsltfiddle.liberty-development.net/gWvjQfV/1上的变换
输出
<CompanyTypes>
<Parent1>
<ChildNode1>Test1</ChildNode1>
<ChildNode2>Test</ChildNode2>
<CompanyType>
<CompanyTypeID>1</CompanyTypeID>
<CompanyTypeName>Individual</CompanyTypeName>
<CompanyTypeDesc>Individual</CompanyTypeDesc>
<IsBusiness>Y</IsBusiness>
</CompanyType>
</Parent1>
<Parent1>
<ChildNode1>Test3</ChildNode1>
<ChildNode2>Test9</ChildNode2>
<CompanyType>
<CompanyTypeID>1</CompanyTypeID>
<CompanyTypeName>Individual</CompanyTypeName>
<CompanyTypeDesc>Individual</CompanyTypeDesc>
<IsBusiness>Y</IsBusiness>
</CompanyType>
</Parent1>
</CompanyTypes>