XPATH:选择根,过滤子元素



考虑以下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_02ins元素。如果要转换XML,请改用XSLT。

您可以写一些类似的东西

<inst>{doc('database/data.xml')/inst/ins[id eq "id_01"]}</inst>
"值比较"运算符(EQ,LT等)设计用于比较单个值,因此最好使用'eq'

最新更新