【问题标题】:select value sibling with condition选择具有条件的值同级
【发布时间】:2020-07-08 15:15:00
【问题描述】:

我有一个 xsl 可以从文档中选择值,它工作正常,但我需要向它添加一个条件,但不知道如何。 源 xml 有一个这样的循环节点:

<recurringNode><field1>1000</field1><field2>valueA</field2></recurringNode>

要根据 field1 的值选择 field2 的值,我使用此指令,它工作正常:

<xsl:value-of select=".//field1[text()='ABC']/following-sibling::field2/text()"/>

但我需要增强它。我需要添加一个 OR 条件来检查 field1 中的值。条件是:

field1 = 'ABC' 或子字符串(field1, 0, 1)='X'

有可能实现吗?

问候。

JT

【问题讨论】:

  • substring(field1, 0, 1)='X' 这永远不会是真的。 substring() 函数从 1 开始计数,而不是 0。
  • 我知道,它从 1 到 1 的位置,但它无论如何都不起作用。

标签: xml xslt conditional-statements siblings


【解决方案1】:

我愿意:

<xsl:value-of select="recurringNode[field1='ABC' or starts-with(field1,'X')]/field2"/>

【讨论】:

  • “不起作用”不是有用的描述。您可以在这里看到它确实有效:xsltfiddle.liberty-development.net/pNmCzsP
  • 现在我明白你的意思了,谢谢。您的解决方案与我的第一种方法完全不同,但它确实为我提出的问题提供了答案。我必须重新提出这个问题。假设我有几个字段,即字段 1 和字段 2,我需要根据我在字段 1 中找到的字段 2 的值。我知道这些字段总是成对出现在我们不知道名称的重复节点中。这就是为什么在我第一次发布的 xsl 指令中,您看不到父/循环节点的名称。您的解决方案是基于重复节点名称的,我需要用我的第一种方法来做,可能吗?
  • 有可能,但比较尴尬:&lt;xsl:value-of select=".//field1[.='ABC' or starts-with(.,'X')]/following-sibling::field2"/&gt;。为什么不简单地将循环节点的名称替换为 * 通配符?
  • 这正是我所需要的 :) 非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
相关资源
最近更新 更多