2016-09-27 134 views
-3

我有这样的XML:JAVA - 解析XML

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope> 
    <soapenv:Body> 
     <response> 
      <note identifier="4719b11c-230e-4533-b1a5-76ac1dc69ef7" hash="956F3D94-A8B375ED-BA15739F-387B4F5E-75C6ED82" dat_prij="2016-09-27T23:06:20+02:00"/> 
      <item uid="9f9cb5fb-75e6-4a2f-be55-faef9533d9ff-ff" active="true"/> 
     </response> 
    </soapenv:Body> 
</soapenv:Envelope> 

我需要解析项目UID,在这种情况下,它的价值“9f9cb5fb ......”,但我不知道如何使用Java标准节点解析。 谢谢你的建议。

编辑: 我尝试这样的代码,但不工作:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    InputSource is = new InputSource(new StringReader(response)); 
    Document doc = builder.parse(is); 

    Element root = doc.getDocumentElement(); 

    NodeList nList = doc.getElementsByTagName("soapenv:Envelope"); 
    NodeList body = nList.getElementsByTagName("soapenv:Body"); 
    NodeList resp = body.getElementsByTagName("response"); 


     Node node = nList.item("item"); 
     System.out.println(""); //Just a separator 
     Element eElement = (Element) node; 
     System.out.println(eElement.getAttribute("uid")); 
+0

@CosmeLopes - 我向问题添加其他信息 –

回答

1

使用DOM:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    InputSource is = new InputSource(new StringReader(response)); 
    Document doc = builder.parse(is); 

    NodeList nList = doc.getElementsByTagName("item"); 
    Node namedItem = nList.item(0).getAttributes().getNamedItem("uid"); 
    System.out.println(namedItem.getNodeValue()); 

使用SAX:

SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser saxParser = factory.newSAXParser(); 

    DefaultHandler handler = new DefaultHandler() { 

     @Override 
     public void startElement(String uri, String localName, String qName, Attributes attributes) 
       throws SAXException { 
      if (qName.equals("item")) { 
       System.out.println(attributes.getValue("uid")); 
      } 
     } 
    }; 

    saxParser.parse(new InputSource(new StringReader(response)), handler); 

您可能需要阅读一些教程关于XML,DOM和SAX: https://docs.oracle.com/javase/tutorial/jaxp/dom/readingXML.html https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html

或者,你可以使用正则表达式和一些字符串替换:

Pattern pattern = Pattern.compile("uid=\"[^\"]*\""); 
    Matcher matcher = pattern.matcher(response); 
    if(matcher.find()) { 
     String attr = matcher.group(); 
     attr = attr.replace("\"", ""); 
     attr = attr.replace("uid=", ""); 
     System.out.println(attr); 
    } 

注:

你的XML是无效的SOAP消息。它缺少一些名称空间声明 - 没有声明soapenv前缀,并且您的元素和属性未定义。