首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSL:template &两个匹配条件的组合以选择外部节点

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

Stack Overflow用户
提问于 2017-08-20 12:06:00
回答 1查看 137关注 0票数 0

给定以下( a) XML文件:

代码语言:javascript
复制
<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>

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

  • span本身具有一个deltaxml:deltaV2 2属性,其值为'A!=B‘,并且
  • 这个内部最内部的deltaxml:属性值节点的确切的deltaxml:attributes/dxa:class/deltaxml:attributeValue子结构,这个deltaxml:deltaV2 2属性设置为'B‘值,并且还包含'LoF’作为它的值/文本。

基本上,我需要匹配上面所示的条件,以便以后选择/使用“一些文本”部分。但是,一旦我匹配了输入xml中的<span>节点,就很容易做到这一点。但到目前为止,我一直在挠头,无法选择节点。

也许任何人都能流利地掌握稍微复杂的匹配语句,并且知道哪一个是正确的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-20 14:39:01

您只需创建一个大谓词表达式and'ing和计数属性。不需要直接匹配节点,因为没有元素的属性是不存在的。然而,元素和属性被计算,以确保span/element中不存在更多或更少的元素/属性。文本节点不被处理,只检查Some Text的存在。

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

代码语言:javascript
复制
<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>

不幸的是,在包含子树的变量中比较产生的两个树片段不起作用,因为它没有比较-op (see here)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45781936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档