Oracle中通过xml获取数据:XVM-01046: [XQST0046] Invalid URILiteral

时间:2020-10-21 15:50:00 来源:互联网 作者: 神秘的大神 字体:

xml为:

<Items><item xmlns="0"><ItemId>32</ItemId></item></Items>

Oracle中通过xml获取数据: 

SELECT *
FROM   XMLTABLE(XMLNAMESPACES('0' AS "ns1"),
                 '/Items/ns1:item' PASSING
                  XMLTYPE('<Items><item xmlns="0"><ItemId>32</ItemId></item></Items>')
                  COLUMNS ITEM_ID VARCHAR2(50) PATH 'ns1:ItemId')

在个别数据库能执行正常,在有些数据库执行报错:

ORA-19112: 赋值时出错:
XVM-01046: [XQST0046] Invalid URILiteral
1 declare namespace ns1="0";/Items/ns1:item
- ^

把xmlns的值换成带有字母的字符串后执行正常(在一些数据库,xmlns的值为数字可以正常执行,有些不可以的换成带字母的字符串可以正常执行,还不清楚为什么)

另外,XML内容含有小于号"<"和"&"需要转义,否则会报错:
"<"转义"&lt;"
"&"转义"&amp;"

var str="***";//还有&或<的字符串
str=str.replace(new RegExp("<", "g"), "&lt;").replace(new RegExp("&", "g"), "&amp;");