![如何在带有命名空间的 XML 文档上使用 LibreOffice FILTERXML 函数?](https://linux22.com/image/1485422/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%B8%A6%E6%9C%89%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E7%9A%84%20XML%20%E6%96%87%E6%A1%A3%E4%B8%8A%E4%BD%BF%E7%94%A8%20LibreOffice%20FILTERXML%20%E5%87%BD%E6%95%B0%EF%BC%9F.png)
当 XML 文档的文档元素具有指定的命名空间时,我很难使用 FilterXML() 函数获取 XML 节点的值。
例子:
<?xml version="1.0" encoding="UTF-8"?> <DocumentElement xmlns="XMLSchemaDefinition.xsd"> <字段> <值> 100 </值> </字段> </DocumentElement>
= FILTERXML(A1, “/文档/元素/值[1]”)
我设法通过以下方式删除命名空间来使 FilterXML 正常工作:
= FILTERXML(SUBSTITUTE(A1, "<DocumentElement xmlns=""XMLSchemaDefinition.xsd"">", "<DocumentElement>"), "/DocumentElement/Field/Value[1]")
有没有办法获取 XML 节点的值而不必删除命名空间?
我目前正在使用 LibreOffice 版本:5.0.5.2
答案1
像这样忽略命名空间:
= FILTERXML(A1, "/*[name()='DocumentElement']/*[name()='Field']/*[name()='Value'][1]")
看https://stackoverflow.com/questions/5239685/xml-namespace-breaking-my-xpath。