2011-12-22 110 views
1

如何從類似於XSL的XSLT排除結果前綴屬性中排除結果前綴。XQuery排除結果前綴

目前,我的XQuery爲名稱空間生成名稱空間前綴,這些名稱空間不屬於結果集的一部分,但是屬於原始有效內容的一部分。

+1

顯示你的輸入,你想要的輸出,你的查詢和你的實際輸出。然後我們可以幫助您糾正您的查詢。 – 2011-12-22 17:48:45

回答

2

XQuery實際上並沒有像XSLT中的排除結果前綴那樣的內置功能。序列化擴展似乎也沒有幫助。因此,您必須在返回之前處理最終結果。應該不難。

xqueryfunctions網站的功能可能有所幫助,如functx:change-element-names-deephttp://www.xqueryfunctions.com/xq/functx_change-element-names-deep.html),但這並不符合這裏的法案。所以,這裏有我自己更具體的解決方案:

declare function local:remove-prefixes($node as node(), $prefixes as xs:string*) { 
    typeswitch ($node) 
    case element() 
     return 
      if ($prefixes = ('#all', prefix-from-QName(node-name($node)))) then 
       element {QName(namespace-uri($node), local-name($node))} { 
        $node/@*, 
        $node/node()/local:remove-prefixes(., $prefixes) 
       } 
      else 
       element {node-name($node)} { 
        $node/@*, 
        $node/node()/local:remove-prefixes(., $prefixes) 
       } 
    case document-node() 
     return 
      document { 
       $node/node()/local:remove-prefixes(., $prefixes) 
      } 
    default 
     return $node 
}; 

HTH!