2011-12-22 11 views
1

XSLのXSLT exclude-result-prefixes属性と同様のXQueryから結果プレフィックスを除外するにはどうすればよいですか。XQueryの結果プレフィックスの除外

現在のところ、私のXQueryは、結果セットの一部ではなく元のペイロードの一部であった名前空間の名前空間プレフィックスを生成します。

+1

入力内容、希望する出力、クエリ、および実際の出力を表示します。そして、あなたの質問を修正するのを助けることができます。 –

答えて

2

XQueryには、XSLTのexclude-result-prefixesのような組み込み機能はありません。シリアライゼーションの拡張はそこでは役に立たないようです。したがって、返却する直前に最終結果を処理することで、自分で処理する必要があります。しかし、困難ではありません。

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!

関連する問題