Как использовать Qt 5 и XQuery для замены одного элемента элементом из другого файла XML

Я пытался заменить один элемент (и его подэлементы) с содержимым из другого файла XML с тем же элементом.

Пример:

FiLea:

<A>
<B id="1">
// more sub elements
</B>
<B id="2">
// more sub elements
</B>
</A>

FILEB

<A>
<B id="1">
// other sub elements than FileA has
</B>
</A>

Из этого источника:
http://docs.basex.org/wiki/XQuery_Update

Я попробовал следующее:

copy $c := doc('FileA')
modifiy (
replace node $c/A/B[@id='1'] with element doc('FileB')/A/B[@id='1']
)
return $c

Это не поддерживается в xtpatterns Qt. Я пробовал разные версии кода выше, но без удачи. Я уже использую XQuery для получения частей файлов XML, но я не нашел решения, как это сделать.

Может быть, инструменты Qt не поддерживают это? Я не могу найти на страницах Qt ничего о том, как сделать что-то подобное (xmlprocessing).

1

Решение

Обновление XQuery является дополнением к XQuery. Из чего Документация по Qt 5 XQuery описывает, XQuery Update не поддерживается.

Поскольку не поддерживается изменение элементов без XQuery Update, вам придется реконструировать все дерево, применяя некоторые модификации. Для общего использования это может быть достигнуто с помощью общего XQuery шаблон с видом copy функция, но для довольно простой структуры без вложенных элементов вы можете сделать проще без функции, жестко закодировав структуру.

<A>{
for $B-fileA in doc('/tmp/a.xml')/A/B
let $B-fileB := doc('/tmp/b.xml')/A/B[@id = $B-fileA/@id]
return
if ( $B-fileB )
then $B-fileB
else $B-fileA
}</A>

В качестве альтернативы, вы можете положиться на реализацию XQuery с поддержкой XQuery Update. И то и другое саксонский, Basex и, возможно, другие предоставляют привязки или реализации языка C ++.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]