2016-11-27 43 views
1

我有一个XML文件。我需要获取除文件之外的所有元素。需要在XQuery中编写它。什么表达?如何忽略XQuery输出中的XML元素?

我的文件是doc1.xml有:

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

如果我做FN:DOC(doc1.xml)将返回一切。 我想除了3. 元素值如何做到这一切的信息?

+4

你需要做树的递归复制沿着线http://stackoverflow.com/questions/5846779/xquery-update-question/5979002建议,跳过不必要的节点(而不是处理它)当你到达它。 –

回答

2

通过使用typeswitch,无所事事为three元素,复制所有其他内容的函数传递文档。

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)