我必须从这样的XML中提取attr
值:
<FIXML xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2">
<TAG attr="value">
...
</TAG>
</FIXML>
并尝试使用此类Java代码
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/FIXML/TAG/@attr");
XmlPayloadConverter converter = new DefaultXmlPayloadConverter();
Node node = converter.convertToNode(xmlStr);
Object result = expression.evaluateAsString(node);
不幸的是,此处的result
值始终为空。如果删除命名空间attr xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2"
,代码将按预期工作(result
具有value
字符串)。
如何忽略我的Java代码示例中的命名空间?
UPDATE :看起来我必须在我的表达式中使用XPath local-name()
函数,但在我的情况下如何使用它?
解决方案:在我的情况下,正确的XPath exprtssion为"/*[local-name()='FIXML']/*[local-name()='TAG']/@attr"
答案 0 :(得分:0)
类似的东西在这里张贴/回答: How to retrieve namespaces in XML files using Xpath
另一种方法是忘记将前缀与之关联起来 命名空间,只需使您的路径无名称空间。你可以这样做 在需要引用时使用local-name()函数 你不知道的名字的元素。例如:
//*[local-name() = 'Element']