XQuery: вставка узлов - PullRequest
3 голосов
/ 25 мая 2010

Я читаю в файле XML с помощью XQuery и хочу вставить несколько узлов / элементов и сгенерировать новый файл XML. Как мне это сделать?

Я пытался использовать функцию replace (), но, похоже, все мои теги XML удаляются, когда я вызываю doc () для загрузки моего документа. Поэтому вызов replace () бесполезен, если удаляются мои теги XML.

Любая помощь? Могу ли я использовать другие технологии?

Ответы [ 4 ]

4 голосов
/ 18 мая 2012

Существует расширение языка XQuery, позволяющее выполнять обновления, - средство обновления XQuery - для изменения документов.

Вставка узла выглядит следующим образом:

insert node <foo>bar</foo>
  into /bar//baz[id='qux']

Среди других движков это поддерживается BaseX .

См. http://www.w3.org/TR/xquery-update-10/

1 голос
/ 18 мая 2012

Используя XQuery Scripting, вы можете писать такие программы:

variable $stores := doc("stores.xml")/stores;

insert node element store { 
  element store-number { 4 },
  element state { "CA" }
} into $stores;

$stores

Вы можете попробовать такой пример в прямом эфире на http://www.zorba -xquery.com / html / demo # vpshT + pVURyQSCEOKrFBrF0jyGY =

0 голосов
/ 25 мая 2010
0 голосов
/ 25 мая 2010

replace () является строковой операцией, поэтому перед заменой XML будет преобразован в строку.

Чтобы создать измененную копию исходного файла, вы можете изменить преобразование идентичности, которое рекурсивно копирует исходный файл, чтобы вставить новые узлы, где это необходимо - см. Статью в XQuery Wikibook

В качестве альтернативы, если файл находится в базе данных XML, такой как eXist, вы можете использовать операции обновления для вставки элементов на месте.

...