Я пытаюсь вставить новые элементы в XML-документ, используя BaseX.узел xquery insert из внешнего xs: строковая переменная (basex)
declare variable $part external;
insert nodes $part as first into db:open("PARTDB")/assembly[@name="ZB09010"]
Я использую GUI BaseX для моего тестирования и определил переменную $ part (нажав значок $).
Если я использую «локальную» переменную, используя, например
let $up := <Employee Name="Joe">
<Personal>
<SSN>666-66-1234</SSN>
</Personal>
<StaffInfo>
<Position>Doctor</Position>
<AccountableTo>Jeff</AccountableTo>
</StaffInfo>
</Employee>
return
insert node $up as last into doc('office')/Staff
затем вставка работает правильно, однако, с внешней переменной каждый символ, который является зарезервированным XML символ преобразуется в последовательность символов XML побег например пример: < становится & lt;
Мне удалось заставить его работать, обернув переменную функцией xquery: eval ($ part), но это кажется мне взломанным.
Есть ли тип, отличный от xs: string Я должен использовать, чтобы предотвратить перевод? Или есть какая-то функция, которую мне нужно использовать с внешней переменной, чтобы предотвратить перевод. Я также попытался обернуть содержимое XML-содержимого $ part CDATA, но xml все еще был преобразован в escape-символы.
Я пробовал функцию fn: parse-xml, мой xml имеет префикс пространства имен и функция parse-xml возвращает ошибку – mikee
Я пробовал функцию fn: parse-xml, мой xml имеет префикс пространства имен (asy) и Функция parse-xml возвращает ошибку FODC0006 (строка 1): префикс «asy» для элемента «asy: part» не связан. Если я добавлю оператор пространства имен для asy впереди xml, я получаю другую ошибку. FODC0006 (строка 1): содержимое не допускается в прологе. Однако, если я использую запрос: функция eval ($ part), похоже, работает. – mikee
Если у содержимого есть необъявленный префикс пространства имен, parse-xml вполне прав, чтобы его отклонить. query: eval() звучит как расширение поставщика, поэтому ему разрешено делать все, что ему нравится. –