DB2中XMLQuery查询带xmlns命名空间的XML数据无返回问题求助
DB2带默认命名空间XML查询无结果解决方案
问题原因
XML根节点声明了默认命名空间http://yummy.cupcakes.com,但查询用的XPath未声明对应命名空间,默认仅匹配无命名空间的节点,因此无法命中目标节点,无返回结果。
可选用的解决方法
方法1:在XPath中声明默认命名空间(生产环境首选,最规范)
直接在XQuery开头添加默认命名空间声明,和XML的命名空间取值保持一致即可,不需要修改原有路径写法:values xmlquery( 'declare default element namespace "http://yummy.cupcakes.com"; $rf/Producers/FIRMS/FIRM/EIN/text()' passing xmlparse(document '<Producers xmlns="http://yummy.cupcakes.com"><FIRMS><FIRM><EIN>27</EIN></FIRM></FIRMS></Producers>') as "rf" )方法2:命名空间绑定前缀使用
给命名空间绑定自定义前缀,XPath路径中每个节点都添加前缀标识:values xmlquery( 'declare namespace cup="http://yummy.cupcakes.com"; $rf/cup:Producers/cup:FIRMS/cup:FIRM/cup:EIN/text()' passing xmlparse(document '<Producers xmlns="http://yummy.cupcakes.com"><FIRMS><FIRM><EIN>27</EIN></FIRM></FIRMS></Producers>') as "rf" )方法3:通配符忽略命名空间(临时测试用,不推荐生产使用)
用*:通配符匹配任意命名空间下的同名节点,不需要声明命名空间,但可能出现非预期的匹配结果:values xmlquery( '$rf/*:Producers/*:FIRMS/*:FIRM/*:EIN/text()' passing xmlparse(document '<Producers xmlns="http://yummy.cupcakes.com"><FIRMS><FIRM><EIN>27</EIN></FIRM></FIRMS></Producers>') as "rf" )
内容的提问来源于stack exchange,提问作者NotWoz
相关产品推荐
相关产品推荐

