MYSQL中的XML解析存储过程
问题描述:
我有一个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被硬编码,因为它们可能会被认为不一样。任何机构有任何想法?
答
目前没有办法忽略MySQL XML函数中的命名空间。虽然ExtractValue的第二个参数是XPath字符串,但它不支持完整的XPath功能,因此诸如//*:token//*:id
或//*[local-name()='token']//*[local-name()='id']
之类的内容不起作用。
无论如何,命名空间与标签名称一样是XML的一部分。如果你想做适当的XML处理,你不应该忽略名字空间。这与标签名称不需要硬编码没有什么不同,因为它们不会一直是相同的。