2017-05-26 101 views
1

我有一个xml,其节点名称前面带有名称空间。这些名称空间不一致,可能会有所不同。如何在没有硬编码名称空间的情况下提取mysql存储过程中节点的值。MYSQL中的XML解析存储过程

防爆XML:

<ns1:token> 
 
    <ns2:id>12</ns2:id> 
 
</ns1:token>

防爆的mysql: 我能够在存储过程如下

set id=ExtractValue(xml,'//ns1:token//ns2:id'); 

阅读 '身份证' 的价值,但是,我不希望ns1/ns2被硬编码,因为它们可能会被认为不一样。任何机构有任何想法?

回答

0

目前没有办法忽略MySQL XML函数中的命名空间。虽然ExtractValue的第二个参数是XPath字符串,但它不支持完整的XPath功能,因此诸如//*:token//*:id//*[local-name()='token']//*[local-name()='id']之类的内容不起作用。

无论如何,命名空间与标签名称一样是XML的一部分。如果你想做适当的XML处理,你不应该忽略名字空间。这与标签名称不需要硬编码没有什么不同,因为它们不会一直是相同的。