Как разобрать XML в Java в нодлист - PullRequest
0 голосов
/ 09 мая 2018

это мой xml

<?xml version = "1.0" encoding = "UTF-8"?>
 <ns0:GetADSLProfileResponse xmlns:ns0 = "http://">
<ns0:Result>
    <ns0:eCode>0</ns0:eCode>
    <ns0:eDesc>Success</ns0:eDesc>
</ns0:Result>
</ns0:GetADSLProfileResponse> 

, это мой код на Javaрезультат зацикливается на нем и получает 0 в экоде и успех в eDesc

CustomerProfileResult pojo = new CustomerProfileResult();
    String body = readfile();
    System.out.println(body);
    try {  
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document dom = db.parse(new InputSource(new StringReader(body)));
        XPath xpath =XPathFactory.newInstance().newXPath();

        XPathExpression name = xpath.compile("/xml/GetADSLProfileResponse/Result");
        NodeList nodeName = (NodeList) name.evaluate(dom, XPathConstants.NODESET);

        if(nodeName!=null){

        } 

1 Ответ

0 голосов
/ 09 мая 2018

Резюме

Вы можете попробовать следующее выражение, которое позволяет вам выбирать узлы, не заботясь о пространстве имен ns0:

/*[local-name()='GetADSLProfileResponse']/*[local-name()='Result']/*

Объяснение

В вашем синтаксисе несколько частей были неверными. Давайте посмотрим вместе. Синтаксис XPath /xml означает, что корневым узлом документа является <xml>, но корневым элементом является <ns0:GetADSLProfileResponse>; GetADSLProfileResponse тоже неверно, потому что ваш XML-файл содержит пространство имен. То же самое для Result:

/xml/GetADSLProfileResponse/Result

В моем решении я проигнорировал пространство имен, потому что ваше предоставленное пространство имен является неполным. Вот полная программа, чтобы начать:

String XML =
  "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n"
      + "<ns0:GetADSLProfileResponse xmlns:ns0 = \"http://\">\n"
      + "  <ns0:Result>\n"
      + "    <ns0:eCode>0</ns0:eCode>\n"
      + "    <ns0:eDesc>Success</ns0:eDesc>\n"
      + "  </ns0:Result>\n"
      + "</ns0:GetADSLProfileResponse> ";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document;
try (InputStream in = new ByteArrayInputStream(XML.getBytes(StandardCharsets.UTF_8))) {
  document = builder.parse(in);
}

XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xPath.compile("/*[local-name()='GetADSLProfileResponse']/*[local-name()='Result']/*");

NodeList nodeList = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
  Node node = nodeList.item(i);
  System.out.println(node.getNodeName() + ": " + node.getTextContent());
}

Он печатает:

ns0:eCode: 0
ns0:eDesc: Success

Смотри также:

...