XSL:模板 &两个匹配条件的组合以选择外部节点



给定以下(a(XML文件的一部分:

<span deltaxml:deltaV2="A!=B">
<deltaxml:attributes deltaxml:deltaV2="A!=B">
<dxa:class deltaxml:deltaV2="A!=B">
<deltaxml:attributeValue deltaxml:deltaV2="B">LoF</deltaxml:attributeValue>
</dxa:class>
</deltaxml:attributes>
Some Text
</span>

。我希望/需要在目标特定跨越的<xsl:template match="..">语句中匹配这些<span>节点

  • 跨度本身具有deltaxml:deltaV2属性,值为 'A!=B',并且
  • 确切的 deltaxml:
  • attributes/dxa:class/deltaxml:attributeValue子结构,此最里面的 deltaxml:attributeValue 节点将该deltaxml:deltaV2属性设置为">B"值,并且还包含">LoF"作为其值/文本

基本上,我需要匹配上面显示的确切条件,以便以后选择/使用"一些文本"部分..但是一旦我匹配输入xml中的<span>节点,这很容易做到。 但到目前为止,我一直在挠头,未能选择节点。

也许有人精通稍微复杂的匹配语句,并且知道哪一个是正确的。谢谢!

您只需创建一个大的谓词表达式and和计数属性即可。不必直接匹配节点,因为不存在没有元素的属性。但是,对元素和属性进行计数,以确保span/元素中的元素/属性分别不多于或更少。不处理文本节点,仅检查Some Text是否存在。

因此,以下复杂表达式确实与您描述的元素/属性树结构完全匹配:

<xsl:template match="span[
@deltaxml:deltaV2='A!=B' and 
count(descendant::*)=3 and
deltaxml:attributes/@deltaxml:deltaV2 and
count(deltaxml:attributes/@*)=1 and
deltaxml:attributes/dxa:class/@deltaxml:deltaV2 and
count(deltaxml:attributes/dxa:class/@*)=1 and 
deltaxml:attributes/dxa:class/deltaxml:attributeValue/@deltaxml:deltaV2='B' and
count(deltaxml:attributes/dxa:class/deltaxml:attributeValue/@*)=1 and 
deltaxml:attributes/dxa:class/deltaxml:attributeValue/text()='LoF' and
normalize-space(text()[2])='Some Text']">
MATCH!
</xsl:template>

不幸的是,在包含子树的变量中比较两个生成的树片段不起作用,因为它没有比较操作(见这里(。

相关内容

  • 没有找到相关文章

最新更新