oracle解析xml字符串命名空间,Oracle XMLQuery插入不需要的命名空间

如果您使用命名空间的各种值,您可以看到,顶部级别命名空间由于您所做的声明而被声明和包含,在子元素级别,此信息不会以您期待的方式使用.

XQuery正在根据在该执行循环中被考虑的节点中使用的命名空间来提取命名空间,而与整个文档无关.这就是为什么每次XQuery循环时都会重新声明.

其他文章解释说,你所要做的就是“解析”数据以及“提取”它,这在一定程度上是真的,所以XSLT是正确的工具,而不是XQuery.

我发现一个外部链接,它具有剥离命名空间的XQuery方式,因此返回“raw”XML是here.

将该代码应用到您的XQuery已经让我:

SELECT xmlquery('xquery version "1.0"; (: :)

declare default element namespace

"http://www.somewherein.uk/ns/1.0"; (: :)

declare function local:strip-namespace($inputRequest as element()) as element()

{

element {xs:QName(local-name($inputRequest ))}

{

for $child in $inputRequest /(@*,node())

return

if ($child instance of element())

then local:strip-namespace($child)

else $child

}

}; (: :)

{

for $s in /*:patent/*

return local:strip-namespace($s)

}

'

PASSING cmf.XML_DATA

RETURNING content)

FROM XML_DOCUMENT_TMP cmf WHERE cmf.DOCUMENT_ID=1

一些进一步的编辑让我到下面,我认为是你以后(在专利级定义的命名空间)

SELECT xmlquery('xquery version "1.0"; (: :)

declare default element namespace

"http://www.somewherein.uk/ns/1.0"; (: :)

declare function local:strip-namespace($inputRequest as element()) as element()

{

element {fn:name($inputRequest)}

{

for $child in $inputRequest /(@*,node())

return

if ($child instance of element())

then local:strip-namespace($child)

else $child

}

}; (: :)

{

for $s in /(*:patent, node())

return local:strip-namespace($s)

}

'

PASSING cmf.XML_DATA

RETURNING content)

FROM XML_DOCUMENT_TMP cmf WHERE cmf.DOCUMENT_ID=1;

如下所述,由于XPath中的一些问题,导致循环代码中的一些重复.这也意味着txsm命名空间被声明了几次; XQuery声明它是“第一次”遇到使用它的命名空间,因为它走那棵树分支意味着如果有兄弟姐妹使用ns,那么它将被声明多次.通过将声明的显式布局移回到父节点,我们可以消除这一点.

SELECT xmlquery('xquery version "1.0"; (: :)

declare default element namespace "http://schemas.thomson.com/ts/20041221/tsip"; (: :)

declare namespace tsip="http://schemas.thomson.com/ts/20041221/tsip"; (: :)

declare namespace tsxm="http://schemas.thomson.com/ts/20041221/tsxm"; (: :)

declare function local:strip-namespace($inputRequest as element()) as element()

{

element {fn:name($inputRequest)}

{

for $child in $inputRequest /(@*,node())

return

if ($child instance of element())

then local:strip-namespace($child)

else $child

}

}; (: :)

{

for $s in /*:patent/*

return local:strip-namespace($s)

}

'

PASSING cmf.XML_DATA

RETURNING content)

FROM XML_DOCUMENT_TMP cmf WHERE cmf.DOCUMENT_ID=1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值