【问题标题】:How to get a value from a XML with namespace but without prefix in Java?java - 如何从具有命名空间但没有Java前缀的XML中获取值?
【发布时间】:2015-08-06 22:21:32
【问题描述】:

嗯,这是xml:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<FECompUltimoAutorizadoResponse xmlns="http://ar.gov.afip.dif.FEV1/">
<FECompUltimoAutorizadoResult>
<PtoVta>12</PtoVta>
<CbteTipo>1</CbteTipo>
<CbteNro>1</CbteNro>
</FECompUltimoAutorizadoResult>
</FECompUltimoAutorizadoResponse>
</soap:Body>
</soap:Envelope>

我想获得 CbteNro,但我不能,因为 FECompUltimoAutorizadoResponse,我尝试了这个:

Document document = new Builder().build(responseString, "test.xml");
    Nodes nodes = document.query("/soap:Envelope[@xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"]/soap:Body/FECompUltimoAutorizadoResponse[@xmlns=\"http://ar.gov.afip.dif.FEV1/\"]/FECompUltimoAutorizadoResult/CbteNro\n");
    System.out.println(nodes.get(0).getValue());

使用 XOM,但它不起作用,我收到此消息:

线程“主”nu.xom.XPathException 中的异常:XPath 错误:XPath 表达式使用未绑定的命名空间前缀soap

谢谢!

【问题讨论】:

  • 这里有一些可能的方法:1, 2, 3

标签: java xml xpath xom


【解决方案1】:

感谢har07,可以这样解决:

Document document = new Builder().build(responseString, "test.xml");
Element rootElem = document.getRootElement();
XPathContext xc = XPathContext.makeNamespaceContext(rootElem);
xc.addNamespace("fev1", "http://ar.gov.afip.dif.FEV1/");
Nodes matchedNodes = rootElem.query("/soap:Envelope/soap:Body/fev1:FECompUltimoAutorizadoResponse/fev1:FECompUltimoAutorizadoResult/fev1:CbteNro", xc);

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多