1

我有一个 XML 文档:

<resultsets>
    <row>
        <emp_no>10001</emp_no>
        <first_name>Georgi</first_name>
        <last_name>Facello</last_name>
    </row>
    <row>
        <emp_no>10007</emp_no>
        <first_name>Bezalel</first_name>
        <last_name>Simmel</last_name>
    </row>
</resoutsets>

我有一个变量查询emp_no字段定义为:

let $emp_no := doc("employees.xml")//emp_no

我想在查询中使用 $emp_no 节点名称 (emp_no) 来做同样的事情,例如:

doc("employees.xml")//$emp_no/name()

是否可以在表达式左侧的路径中包含变量?

4

2 回答 2

2

是否可以在表达式左侧的路径中包含变量?

这里的关键点是用变量引用替换路径中的名称在语法上是合法的,但这并不意味着您可能认为它意味着什么。如果变量 $X 的值为“orders”,则

//customer/$X

并不意味着

//customer/orders

相反,它意味着

//customer/"orders"

它为文档中的每个客户元素返回字符串“orders”的一次出现。

如果要查找名称等于字符串 $X 的元素,请使用

//customer/*[name()=$X]

除非涉及命名空间,在这种情况下,您需要比较命名空间 URI 和本地名称。

于 2018-02-19T08:41:01.977 回答
1

是的,您可以在 XPath 表达式中使用变量。但目前尚不清楚您要问或要达到的目标。

如果您要选择与name()分配给$emp_no变量的元素具有相同的元素,您可以匹配任何元素,然后使用谓词过滤器来测试 是否name()等于name()元素序列中的任何值$emp_no:_

doc("employees.xml")//*[name() = $emp_no/name()]

但是,这只会返回emp_no已分配给该元素的相同元素$emp_no

于 2018-02-18T02:19:03.533 回答