Xquery替换具有前缀的元素值

Xquery替换具有前缀的元素值,xquery,Xquery,我是Xquery的新手。此查询上已存在帖子,但当XML具有如下前缀时,我遇到了问题: 源XML: enter code here <?xml version="1.0" encoding="UTF-8"?> <so:category> <bo:catid>1</bo:catid> <bo:cattext>sport</bo:cattext> </so:category> 在此处输入代码 1. 运

我是Xquery的新手。此查询上已存在帖子,但当XML具有如下前缀时,我遇到了问题:

源XML:

enter code here
<?xml version="1.0" encoding="UTF-8"?>
<so:category>
    <bo:catid>1</bo:catid>
    <bo:cattext>sport</bo:cattext>
</so:category>
在此处输入代码
1.
运动
Xquery更改另一篇文章中提供的值:

declare namespace local = "http://example.org";
declare namespace bo = "http://example1.org";

declare function local:copy-replace($element as element()) {

  if ($element/self::bo:catid)
  then <bo:catid>test</bo:catid>
  else element {node-name($element)}
               {$element/@*,
                for $child in $element/node()
                 return if ($child instance of element())
                        then local:copy-replace($child)
                       else $child
               }
};
 local:copy-replace(/*)
声明命名空间本地=”http://example.org";
声明命名空间bo=”http://example1.org";
声明函数local:copy replace($element as element()){
如果($element/self::bo:catid)
然后测试
else元素{node name($element)}
{$element/@*,
对于$element/node()中的$child
返回if($element()的子实例)
然后本地:复制替换($child)
其他$child
}
};
本地:复制替换(/*)
我的XML文档中的元素有一个前缀。所以当我执行查询时 我得到以下错误:

错误-元素“bo:catid”的前缀“bo”未绑定


我不知道如何处理前缀&我已经在互联网上搜索了相关主题。但是,我无法用提供的信息解决此问题,需要知道我做错了什么。

根据XML 1.0建议,您的XML格式良好,但根据XML名称空间1.0,它的名称空间格式不好(因为它使用的名称空间前缀未绑定到任何名称空间URI)。XML生态系统中的大多数工具只处理格式良好的名称空间XML,这是使用XQuery的绝对要求


在查询中声明名称空间前缀并不能摆脱名称空间格式良好输入的要求。

根据XML 1.0建议,XML格式良好,但根据XML名称空间1.0,它的名称空间格式不好(因为它使用的名称空间前缀不绑定到任何名称空间URI)。XML生态系统中的大多数工具只处理格式良好的名称空间XML,这是使用XQuery的绝对要求


在查询中声明名称空间前缀并不能免除名称空间格式良好输入的要求。

您发布的源“XML”不是名称空间格式良好的XML,因为它使用带有冒号的名称(例如,
bo:catid
)没有在某些命名空间声明中使用前缀
bo
的绑定。您发布的源“XML”不是命名空间格式良好的XML,因为它使用带有冒号的名称(例如
bo:catid
),没有在某些命名空间声明中使用前缀
bo
的绑定。