我在这里搜索过,但找不到如何根据其属性过滤 xml。我有这个xml: <?xml version="1.0" encoding="utf-8"?> <document> <document_head> <title>This is the title</title> <version>This is the title</version> </document_head> <document_body> <paragraph id="AXD"> <text> This is a text that should be in the result </text> <properties> <size>13px</size> <color>#000000</color> </properties> <author>Current user</author> </paragraph> <paragraph id="SFI"> <properties> <text> This is some other text that should not be in there </text> </properties> </paragraph> <paragraph id="SFA"> <author>Some random guy</author> </paragraph> <paragraph id="ARG"> This doesn't mean anything. </paragraph> <paragraph id="RRR"> This does, hence should be in there. </paragraph> </document_body> </document>
我期待这个结果: <?xml version="1.0" encoding="UTF-8"?> <document> <document_head> <title>This is the title</title> <version>This is the title</version> </document_head> <document_body> <paragraph id="AXD"> <text> This is a text that should be in the result </text> <properties> <size>13px</size> <color>#000000</color> </properties> <author>Current user</author> </paragraph> <paragraph id="RRR"> This does, hence should be in there. </paragraph> </document_body> </document>
目前,我有这个 XSLT: <?xml version="1.0" encoding="utf-8"?> <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="document_body/paragraph[not(@id='AXD')][not(@id='RRR')]" /> </xsl:stylesheet>
产生这个XML: <?xml version="1.0" encoding="UTF-8"?> <document> <document_head> <title>This is the title</title> <version>This is the title</version> </document_head> <document_body> <paragraph id="AXD"> <text> This is a text that should be in the result </text> <properties> <size>13px</size> <color>#000000</color> </properties> <author>Current user</author> </paragraph> </document_body> </document>
你知道我缺少什么吗?
谢谢。
更新: 似乎该代码适用于另一个 XSLT 处理器,但不适用于 Java Transformer。
最佳答案
我相信你的条件应该有效!但是,这里有几种替代方法可以检查,因此请尝试一下,看看这是否有所不同。
<xsl:template match="document_body/paragraph[not(@id='AXD' or @id='RRR')]"/>
<xsl:template match="document_body/paragraph[@id != 'AXD' and @id != 'RRR']"/>
关于xml - 使用 xslt 根据属性值过滤 XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11545669/