首页 > 解决方案 > 获取 XPATH 中属性的字符串值

问题描述

如何使用 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$

标签: xmlxpathattributes

解决方案


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

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

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

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


推荐阅读