заменить узел в basex xml с помощью xquery

Я пытаюсь заменить узел в xml, используя следующий код

String xquery_replace="xquery replace node CIDEM/ShopFloor/foo[/CIDEM/ShopFloor/ShopFloorID=1] with "+new_gbXML;
session.execute(xquery_replace);

Итак, я хочу, например, изменить узел foo первого узла ShopFloor

Xml имеет следующее содержимое

<CIDEM>
    <ShopFloor>
        <ShopFloorID>1</ShopFloorID>
        <foo bar="2">
            <baz>there</baz>
        </foo>
    </ShopFloor>
  <ShopFloor>
      <ShopFloorID>2</ShopFloorID>
      <foo bar="5">
          <baz>there</baz>
      </foo>
  </ShopFloor>
</CIDEM>

И я получаю следующую ошибку: «[XUTY0008] В качестве цели замены ожидается один элемент, текст, атрибут, комментарий или число пи».

Есть идеи, почему?


person vagelis    schedule 19.08.2015    source источник
comment
Путь неправильный. Это должно быть похоже на CIDEM/ShopFloor[ShopFloorID="1"]/foo при обращении к foo узлу ПЕРВОГО ShopFloorID   -  person John    schedule 20.08.2015


Ответы (1)


Само сообщение об ошибке сообщает, что не так.

"[XUTY0008] Ожидается, что в качестве цели замены ожидается один элемент, текст, атрибут, комментарий или число Пи."

означает, что ожидается замена элемента, текста или атрибута ... в качестве цели. Но путь в вашем запросе никуда не ведет. Прочтите мой комментарий для правильного пути.

Например: если вы хотите заменить значение атрибута bar на ShopFloorID значением 1, тогда путь должен быть CIDEM/ShopFloor[ShopFlorrID="1"]/foo/@bar

person John    schedule 20.08.2015