提取忽略名称空间

时间:2018-05-09 16:04:00

标签: java xml xpath

我必须从这样的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"

1 个答案:

答案 0 :(得分:0)

类似的东西在这里张贴/回答: How to retrieve namespaces in XML files using Xpath

  

另一种方法是忘记将前缀与之关联起来   命名空间,只需使您的路径无名称空间。你可以这样做   在需要引用时使用local-name()函数   你不知道的名字的元素。例如:

//*[local-name() = 'Element']