XSLT 1.0:如何根据未完全定义的条件匹配节点?

时间:2017-04-22 11:56:00

标签: xml xslt xslt-1.0

我有这个示例输入文件:

<?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来做,但我不知道怎么做。

1 个答案:

答案 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