【问题标题】:XPath 2.0 return first string in an element nodeXPath 2.0 返回元素节点中的第一个字符串
【发布时间】:2018-02-06 11:55:33
【问题描述】:

我只想返回曼谷,仅此而已,我怎样才能只选择第一个字符串?必须有一个函数或类似的东西?

元素节点如下所示:

<Route>Bangkok 05.00, Puket 06.30
      <Ziel>Melbourne an 21.30</Ziel> 
</Route> 

提前致谢!

【问题讨论】:

  • 您对此进行过研究吗?请花点时间阅读how to ask useful questions
  • 确定我做了研究,但我找不到任何只选择第一个字符串的东西。所以如果你有一个想法,我会非常感激
  • 我的 XPath 查询看起来像这样:for $a in //Ereignis/Abflug return ($a/Flugnr, $a/Route/text()) 但是 IDK 我是如何到达曼谷的
  • 是的,我在 substring-before 中看到了它。但这个功能的问题是,我不知道曼谷或其他城市的背后是什么! tokenize 函数效果更好!

标签: xpath xpath-2.0


【解决方案1】:

您可以在 XPath 2.0 中使用 tokenize() 按空格分割文本并仅返回第一个标记化结果:

//Route/tokenize(., ' ')[1]

或者如果目标文本总是在Route 的第一个文本节点子节点中,那么下面应该会稍微高效一些:

//Route/tokenize(text(), ' ')[1]

demo

根据您尝试的查询进行调整:

for $a in //Ereignis/Abflug 
return ($a/Flugnr, $a/Route/tokenize(text(), ' ')[1])

【讨论】:

  • 嘿,谢谢!我不知道 tokenize 是为了那个......所以我试了一下,我的程序告诉我这个错误:“期望一个节点但找到一个原子值而不是:'曼谷'”它有正确的,但没有'不退货?
  • 这可能与您使用的 XPath 引擎的 API 有关。我不知道您的 XPath 引擎是什么以及如何使用它,所以我至少可以建议更改查询以返回统一的数据类型(可能将 $a/Flughr 更改为 $a/Flughr/string()),如果可能的话,并正确参数明确提到了返回节点,如果有的话
【解决方案2】:

选择第一个text()节点可以用

Route/text()[1]

如果只选择“Bangkok”,您可以像这样使用substring-before XPath 1.0 函数

substring-before(Route/text()[1],' ')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2016-11-27
    • 2012-12-06
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多