我正在研究一个XSLT,它需要复制保持相同结构的整个XML,并根据条件过滤掉某些节点。
在下面的示例中,我只需要保留IsBusinness = Y的节点,并删除IsBusiness标签不存在的节点。
<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>
</CompanyType>
</Parent1>
</CompanyTypes>
所需的输出
<CompanyTypes>
<Parent1>
<ChildNode1>Test1</ChildNode1>
<ChildNode2>Test</ChildNode2>
<CompanyType>
<CompanyTypeID>1</CompanyTypeID>
<CompanyTypeName>Individual</CompanyTypeName>
<CompanyTypeDesc>Individual</CompanyTypeDesc>
<IsBusiness>Y</IsBusiness>
</CompanyType>
</Parent1>
</CompanyTypes>
我尝试了以下代码,但是在IsBusiness不存在时无法删除父标记。
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Parent1[CompanyType/IsBusiness != 'Y']"/>
答案 0 :(得分:1)
您所拥有的:
<xsl:template match="Parent1[CompanyType/IsBusiness != 'Y']"/>
正在寻找一个名为IsBusiness
的元素,其值不是"Y"
。您的第三个Parent1
节点没有这样的元素,因此该模板与之不匹配。
请尝试:
<xsl:template match="Parent1[not(CompanyType/IsBusiness = 'Y')]"/>