我有一个xml,想要过滤掉我不需要的部分。这是xml&各自的预期结果,
<CD>
<RT></RT>
<author></author>
<component>
<structurebody>
<component>
<section>
<templateid root = "1" />
</section>
</component>
<component>
<section>
<templateid root = "2" />
</section>
</component>
<component>
<section>
<templateid root = "3" />
</section>
</component>
</structurebody>
</component>
</CD>
我希望输出包含模板ID为1和3而不是2的部分。我正在尝试以下xslt但它不起作用。它输出一切。不确定有什么问题
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/component/structuredBody/component/section/templateId[not(@root = '1' or @root = '3')]" />
</xsl:stylesheet>
任何人都可以让我知道我在哪里弄错了吗?感谢您的帮助。
答案 0 :(得分:1)
试试这个......
<xsl:template match="/CD/component/structuredBody/component/section[templateId[not(@root = '1' or @root = '3')]]" />
请注意xpath中的初始/CD
。另请注意,此匹配section
而不是templateId
(假设您要删除section
元素,而不仅仅是子template
。
实际上,你可以简化它。这里不一定要指定整个层次结构。
<xsl:template match="section[templateId[not(@root = '1' or @root = '3')]]" />