我有这个示例输入文件:
<?xml version="1.0"?>
<graph>
<tag name="A_start0"/>
<tag name="A_end0"/>
<tag name="A_start1"/>
<vertex name="A"/>
<edge name="AB" />
<tag name="A_start2"/>
<tag name="tagA"/>
<vertex name="C"/>
<tag name="A_end2"/>
</graph>
我想提取包含tag
字的所有start
节点,这些节点后面没有一个名称相同的节点,但start
已替换为end
}}。
从我的输入图中,我想获得:
<tag name="A_start1"/>
我的信息是有tag
个元素,其名称以“A_start”和“A_end”开头,但我没有关于名称后面的数字的信息。
我想我应该用key
来做,但我不知道怎么做。
答案 0 :(得分:1)
我不认为可以使用单个XPath表达式来完成。尝试类似:
<xsl:key name="end" match="tag[starts-with(@name, 'A_end')]" use="substring-after(@name, 'A_end')"/>
<xsl:template match="/graph">
<xsl:copy-of select="tag[starts-with(@name, 'A_start')][not(key('end', substring-after(@name, 'A_start')))]"/>
</xsl:template>
或者,您可以考虑使用键并执行:
=COUNTIF($A$2:$A$1048576,A2)=1