xquery如何删除xml文档中的namespace

项目中常常碰到为一些所谓遗留系统提供web service接口的需求,而这些遗留系统的接口只是采用字符串作为输入、输出参数,并且字符串的内容就是xml格式也常常碰见。


其实上述情况倒是比较容易处理,但是一个常见问题是从web service进入的xml文档是带有namespace定义的,而遗留系统处理的xml基本上是没有namesapce定义。所以就有将xml文档的namespace删除的需求。在网上查到一些样例,经过自己测试和改写,算是有了一个xquery的小程序。如下:


(:: pragma  parameter="$anyXML" type="xs:anyType" ::)

declare namespace xf = "http://test";

declare function xf:stripNamespace($anyXML as node()*)
    as node()* {
        for $node in $anyXML
        return if ($node instance of element())
         	then (element
               {expanded-QName ("", local-name($node))}
               {$node/@*,
                xf:stripNamespace($node/node())})
         else if ($node instance of document-node())
         then xf:stripNamespace($node/node())
         else $node
};

declare variable $anyXML as element(*) external;
declare variable $namespace as xs:string external;

xf:stripNamespace($anyXML)

你可能感兴趣的:(xml,Web)