sample_xml我尝试在SQL中使用OPENXML提取XML数据,但XML文件包含前缀,例如:" pidx:CustomerID> 01234",请参阅sample_xml。
如果我排除前缀" pidx:"它不能读取数据,如果我包括,则输出错误:
Msg 6603,Level 16,State 2,Line 15 XML解析错误:参考 未声明的命名空间前缀:' pidx'。
我该怎么做?
答案 0 :(得分:1)
除了永远不会将您的代码/ XML发布为图片之外,还有一些一般提示:
OPENXML
已过时,不应再使用了。更好地使用XML的本地方法,如.value
或.nodes()
。根据评论中的要求,有关声明命名空间的必要性的一些解释。此XML无效:
<abc:test>1</abc:test>
试试这个:
DECLARE @xml XML=N'<abc:test>1</abc:test>';
你会得到这个
Msg 9459,Level 16,State 1,Line 1 XML解析:第1行,第10个字符, 未声明的前缀
现在声明命名空间并且它可以正常工作
DECLARE @xml XML=N'<abc:test xmlns:abc="blah">1</abc:test>';
这样的命名空间对于声明节点和层次结构(= 在中)的所有元素都有效。
在大多数情况下,名称空间是在根节点中声明的
试试这个
DECLARE @xml XML=
N'
<root xmlns:abc="blah">
<abc:test>1</abc:test>
</root>
';
SELECT @xml