我有以下基本的xml,只有在没有DB值= DB1的情况下才能解析NAME。
<rnas>
<rna ID="1">
<NAME>Segment 6</NAME>
<XREF>
<ID>AF389120</ID>
<DB>DB1</DB>
</XREF>
<XREF>
<ID>ABCDE</ID>
<DB>DB2</DB>
</XREF>
</rna>
<rna ID="10">
<NAME>Segment 3</NAME>
<XREF>
<ID>12345</ID>
<DB>DB2</DB>
</XREF>
<XREF>
<ID>66789</ID>
<DB>DB3</DB>
</XREF>
</rna>
</rnas>
预期输出为:
<rnas>
<rna ID="10">
<NAME>Segment 3</NAME>
</rna>
<rnas>
我仍然是一个相对新手,并尝试过使用XSLT 2.0的各种方法,但到目前为止还没有能够正常工作。任何帮助将不胜感激。
答案 0 :(得分:1)
这将做你想要的事情
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="rna[.//DB/text()='DB1']"/>
<xsl:template match="XREF"/>
</xsl:stylesheet>
这是一个身份变换以及两个空模板。第一个匹配包含文本值为rna
的{{1}}的任何DB
,并对其进行抑制。第二个匹配您不想输出的所有DB1
元素。