Я пытаюсь динамически создавать новые узлы в XML-документе на основе окружающих его узлов. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу добавить новый узел после запаса, который имеет то же пространство имен, что и запас. Хотя для этого примера это было бы легко, я хочу иметь возможность сделать это, не зная пространств имен вокруг меня. Можно ли скопировать, а затем переименовать узел, чтобы сохранить его пространство имен и, возможно, другие атрибуты?
то есть если бы у меня было
<?xml version="1.0" encoding="UTF-8"?>
<nsX:bookstore xmlns:nsX="http://namespace1" xmlns:nsY="http://namespace2">
<nsX:bookList>
<nsX:book category="COOKING">
<nsX:title lang="en">Everyday Italian</nsX:title>
<nsY:stock>1</nsY:stock>
</nsX:book>
<nsX:book category="CHILDREN">
<nsX:title lang="en">Harry Potter</nsX:title>
<nsY:stock>0</nsY:stock>
</nsX:book>
<nsX:book category="WEB">
<nsX:title lang="en">XQuery Kick Start</nsX:title>
<nsY:stock>1</nsY:stock>
</nsX:book>
<nsX:book category="WEB">
<nsX:title lang="en">Learning XML</nsX:title>
<nsY:stock>0</nsY:stock>
</nsX:book>
</nsX:bookList>
</nsX:bookstore>
и хотел сгенерировать следующее, еще не зная, какие пространства имен присутствуют.
<?xml version="1.0" encoding="UTF-8"?>
<nsX:bookstore xmlns:nsX="http://namespace1" xmlns:nsY="http://namespace2">
<nsX:bookList>
<nsX:book category="COOKING">
<nsX:title lang="en">Everyday Italian</nsX:title>
<nsY:stock>1</nsY:stock>
<nsY:newNode></nsY:newNode>
</nsX:book>
<nsX:book category="CHILDREN">
<nsX:title lang="en">Harry Potter</nsX:title>
<nsY:stock>0</nsY:stock>
<nsY:newNode></nsY:newNode>
</nsX:book>
<nsX:book category="WEB">
<nsX:title lang="en">XQuery Kick Start</nsX:title>
<nsY:stock>1</nsY:stock>
<nsY:newNode></nsY:newNode>
</nsX:book>
<nsX:book category="WEB">
<nsX:title lang="en">Learning XML</nsX:title>
<nsY:stock>0</nsY:stock>
<nsY:newNode></nsY:newNode>
</nsX:book>
</nsX:bookList>
</nsX:bookstore>
В настоящее время я создаю новый узел, используя xQuery с моей BaseXDB.
insert node <newNode></newNode> after $v/*:bookList/*:book/*:stock
(где $v — книжный магазин)
Как определить пространство имен стандартного узла и затем применить его к новым узлам, которые я создаю?