考虑以下XML-Document:
<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,结果是空的。
我只是不知道这个语句怎么了。
您写的XPath,
/inst[ins/id='id_01']
说要选择包含ins
子元素的inst
根元素,其字符串值为"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可以在您似乎尝试执行的情况下选择root Element 而没有第二个ins
元素。原因是XPath是用于选择的,而不是XML的转换。XML中没有inst
元素可以选择缺少第二个(id_02
)ins
元素。如果要转换XML,请改用XSLT。
您可以写一些类似的东西
<inst>{doc('database/data.xml')/inst/ins[id eq "id_01"]}</inst>
"值比较"运算符(EQ,LT等)设计用于比较单个值,因此最好使用'eq'