【问题标题】:Get the string values of attributes in XPATH获取 XPATH 中属性的字符串值
【发布时间】:2019-11-29 11:55:59
【问题描述】:

如何使用 XPath 获取属性节点的值? 示例 XML 文件:

<model:testFile name="$test1$">
  <model:task exec="/" />
</model:testFile>
<model:testFile name="$test2$">
  <model:task exec="/" />
</model:testFile>

我需要获取属性名称的字符串值。

如果我使用:string(//model:testFile/@name),我会得到$test1$ 作为输出。

我希望上面示例的输出如下所示:

$test1$
$test2$

【问题讨论】:

  • 这取决于您使用的 xpath 客户端。你说的是脚本还是程序?因为你声明你已经得到了第一个正确的结果,只需要某种循环来得到下一个。例如,对于 Java,您需要评估您的语句,例如 expr.evaluate(doc) 其中 expr 是您的 xpath 表达式,而 doc 显然是 xml 文档。然后你会得到一个可以迭代的 NodeList。

标签: xml xpath attributes


【解决方案1】:

string() 函数返回单个字符串。在 XPath 1.0 中,如果将其应用于 >1 个节点的序列,它会为您提供第一个节点的字符串值。在 2.0+ 中它会给你一个错误。

在 XPath 1.0 中,没有像“字符串序列”这样的数据类型,因此无论你多么努力,都无法从表达式中返回字符串序列。您可以做的是返回一系列节点,并让主机应用程序提取节点的字符串值。

在 XPath 2.0 中,您可以返回字符串序列:使用 //model:testFile/@name/string()。或者,您可以使用 string-join(//model:testFile/@name, '&amp;#xa;') 将字符串连接成带有换行符分隔符的单个字符串。 (我在这里为换行使用了 XML 转义;如果 XPath 以将换行表示为 \n 的语言托管,则改用它。)

请始终说明您使用的是哪个 XPath 版本 - 它可以帮助您更轻松地回答问题。

【讨论】:

    【解决方案2】:

    不确定您使用的是哪个 xpath 处理器,但试试这个:

    string-join(//model:testFile/@name,' ')
    

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 2020-09-29
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多