2016-12-14 33 views
1

Xqueryを初めて使用しています。 私は既存のXMLに新しいXML要素を挿入する必要がある何かに取り組んでいます。要素を子として挿入Xqueryを使用して既存のXMLに要素を追加

例:

<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 

上記のXMLは、新しい要素のアドレスを追加することによって更新する必要があります。

<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
    <address>Address</address> 
</note> 

これは、XQueryを使用して行う必要があります。

私はお知らせくださいthis stackoverflow link

に参照さ。

答えて

3

するXQuery 1.0ソリューションは、再帰typeswitch機能を使用することです:

declare function local:insert-address($nodes as node()*) 
{ 
for $node in $nodes 
return 
    typeswitch($node) 
     case element(note) 
      return 
       element { name($node) } { 
        $node/@*, 
        local:insert-address($node/node()), 
        element address { "Address" } 
       } 
     case element() 
      return 
       element { name($node) } { 
        $node/@*, 
        local:insert-address($node/node()) 
       } 
     default 
      return $node 
}; 

let $doc := 
    <note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
    </note> 

return 
    local:insert-address($doc) 

あなたが使用しているもののXQueryエンジン、よりシンプルなソリューション場合があるかもしれませんに応じて、あなたのプロセッサは、Alexander Petrovの答えのようなXQuery Update、またはMarkLogicのxdmp:node-insert-child()などのカスタム関数をサポートしています。

1

はこれを試してみてください:

copy $note := 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

modify (insert node <address>Address</address> into $note) 

return $note 
関連する問題