考虑以下XML文档:
<inst>
<ins>
<id>id_01</id>
<pos>1</pos>
</ins>
<ins>
<id>id_02</id>
<pos>1</pos>
</ins>
</inst>
我尝试获得以下输出:
<inst>
<ins>
<id>id_01</id>
<pos>1</pos>
</ins>
</inst>
我编写了以下XQuery / XPath-Expression:
doc('database/data.xml')/inst[ins/id='id_01']
这不会给出想要的结果而是整个文档,就好像没有过滤条件那样..但是如果我放入XML文档中不存在的id,结果是空的。
我只是不知道这句话有什么问题。
答案 0 :(得分:1)
你写的XPath,
/inst[ins/id='id_01']
表示选择包含inst
子元素的ins
根元素,其子元素的字符串值为"id_01"
。由于XML的根确实符合此条件,因此选择它:
<inst>
<ins>
<id>id_01</id>
<pos>1</pos>
</ins>
<ins>
<id>id_02</id>
<pos>1</pos>
</ins>
</inst>
您可以使用此XPath,
/inst/ins[id='id_01']
只选择这个XML,
<ins>
<id>id_01</id>
<pos>1</pos>
</ins>
但是,没有XPath会选择根元素而不用第二个ins
元素,就像你似乎想要做的那样。原因是XPath用于选择,而不是XML的转换。您的XML中没有inst
元素可以选择缺少第二个(id_02
)ins
元素。如果要转换XML,请改用XSLT。
答案 1 :(得分:-1)
你可以写一些像
这样的东西 <inst>{doc('database/data.xml')/inst/ins[id eq "id_01"]}</inst>
&#34;价值比较&#34;运算符(eq,lt等)旨在比较单个值,因此最好使用&#39; eq&#39;