我有一个xml,其节点名称以名称空间开头。这些名称空间不一致,可能会有所不同。如何在不对命名空间进行硬编码的情况下提取mysql存储过程中节点的值。
Ex XML:
<ns1:token>
<ns2:id>12</ns2:id>
</ns1:token>
Ex mysql: 我能够在存储过程中读取'id'的值,如下所示
set id=ExtractValue(xml,'//ns1:token//ns2:id');
但是,我不希望ns1 / ns2被硬编码,因为它们可能预期不会一直相同。任何人都有任何想法吗?
答案 0 :(得分:0)
目前还没有办法忽略MySQL XML函数中的命名空间。虽然ExtractValue的第二个参数是XPath字符串,但它不支持完整的XPath功能,因此//*:token//*:id
或//*[local-name()='token']//*[local-name()='id']
之类的内容不起作用。
无论如何,命名空间与标记名称一样是XML的一部分。如果要进行正确的XML处理,则不应忽略命名空间。这并不是说你不希望标签名称被硬编码,因为它们不会一直保持不变。