2016-11-27 5 views
1

Ich habe eine XML-Datei. Ich brauche alle Elemente in der Datei außer einem. Müssen Sie es in XQuery schreiben. Was ist der Ausdruck?Wie ignoriere ich ein XML-Element in der XQuery-Ausgabe?

Meine Datei ist doc1.xml hat:

<root> 
    <one>1</one> 
    <two>2</two> 
    <three>3</three> 
</root> 

Wenn ich fn: doc (doc1.xml) es alles zurück. Ich möchte alle Informationen außer dem Element Wert von 3. Wie mache ich das?

+4

Sie benötigen eine rekursive Kopie des Baums zu tun entlang der Linien in http://stackoverflow.com/questions/5846779/xquery-update-question/5979002 vorgeschlagen, den unerwünschten Knoten Überspringen (anstatt es zu verarbeiten) wenn du dazu kommst. –

Antwort

2

Übergeben Sie das Dokument über eine Funktion, die einen Typenschalter verwendet, nichts für das Element three tut und alle anderen Inhalte kopiert.

declare function local:filter($nodes as node()*) 
{ 
for $node in $nodes 
return 
    typeswitch($node) 
     case element(three) 
      return() 
     case element() 
      return 
       element { name($node) } { 
        $node/@*, 
        local:filter($node/node()) 
       } 
     default 
      return $node 
}; 

let $doc := 
    <root> 
    <one>1</one> 
    <two>2</two> 
    <three>3</three> 
    </root> 

return local:filter($doc) 
Verwandte Themen