代码之家  ›  专栏  ›  技术社区  ›  Enamul Haque

如何在Java中解析字符串XML

  •  0
  • Enamul Haque  · 技术社区  · 6 年前

    发行成功

    1. XML格式

      <QRYRESULT><ISSUCCESS>N</ISSUCCESS><REASON>E002</REASON><WARNING>1. Transaction date Should be current date.11-SEP-18  E </WARNING></QRYRESULT>
      
    2. 我写了下面的代码 发行成功 项目值。

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      InputSource is = new InputSource();
      is.setCharacterStream(new StringReader(**myXML**));
      Document doc = db.parse(is);
      NodeList nodeList = doc.getElementsByTagName("QRYRESULT");
      for (int i = 0; i < nodeList.getLength(); i++) {
          Element value = (Element) nodeList.item(i);
          String ISSUCCESS = value.getAttribute("ISSUCCESS");
          System.out.println("ISSUCCESS = " + ISSUCCESS);
      }
      
    5 回复  |  直到 6 年前
        1
  •  3
  •   Jens    6 年前

    ISSUCCESS是元素而不是属性。

    NodeList nodeList = doc.getElementsByTagName("QRYRESULT");
    for (int i = 0; i < nodeList.getLength(); i++) {
        Element value = (Element) nodeList.item(i);
    
        String ISSUCCESS = value.getElementsByTagName("ISSUCCESS").item(0).getTextContent();
        System.out.println("ISSUCCESS = " + ISSUCCESS);
    }
    
        2
  •  0
  •   m4gic    6 年前

    有多种方法可以做到这一点:

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(new InputSource(new StringReader(myXML)));
        // 1, get root element, get first child (ISSUCCESS), get first child (text node), get value
        System.out.println(doc.getDocumentElement().getFirstChild().getFirstChild().getNodeValue());
        // 2, using nodelist
        NodeList rootChildNodes = doc.getDocumentElement().getChildNodes();
        String ISSUCCESSValue = null; 
        for (int i = 0; i < rootChildNodes.getLength(); i++) {
            Node childNode = rootChildNodes.item(i);
            if("ISSUCCESS".equals(childNode.getNodeName())){
                // get text node and get the value
                ISSUCCESSValue = childNode.getFirstChild().getNodeValue();
                break;
            }
        }   
        System.out.println(ISSUCCESSValue);
        // 3, using XPATH
        XPathFactory xPathfactory = XPathFactory.newInstance();
        XPath xpath = xPathfactory.newXPath();
        XPathExpression expr = xpath.compile("/QRYRESULT/ISSUCCESS/text()") // or xpath.compile("//ISSUCCESS/text()");
        String value = expr.evaluate(doc.getDocumentElement());
        System.out.println(value);
    
        3
  •  0
  •   Jens    6 年前

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(**myXML**));
    Document doc = db.parse(is);
    NodeList nodeList = doc.getElementsByTagName("QRYRESULT");
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node childNode = childList.item(i);
        if ("ISSUCCESS".equals(childNode.getNodeName())) {
            System.out.println(childList.item(i).getTextContent()
                                        .trim());
        }
    }
    
        4
  •  0
  •   Ahmed Ashour chim    6 年前
    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource();
    is.setCharacterStream(new StringReader(**myXML**));
    Document doc = db.parse(is);
    NodeList nodes = doc.getElementsByTagName("QRYRESULT");
    Element qryresult = (Element) nodes.item(0);
    Element success = (Element) qryresult.getElementsByTagName("ISSUCCESS").item(0);
    String iSuccess=success.getFirstChild().getTextContent();
    System.out.println("ISSUCCESS: " + iSuccess);
    
        5
  •  0
  •   Ahmed Ashour chim    6 年前

    试试这个。

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(contactsXMLstream);
    doc.getDocumentElement().normalize();
    NodeList nList = doc.getElementsByTagName("QRYRESULT");
    entries=new MarketEntry[nList.getLength()];            
    for (int temp = 0; temp < nList.getLength(); temp++)
    {
        Node nNode = nList.item(temp);
        if (nNode.getNodeType() == Node.ELEMENT_NODE)
        {
            Element eElement = (Element) nNode;
            String vr= eElement.getElementsByTagName("ISSUCCESS").item(0).getTextContent();
        }
    }