2017-05-09 20 views
-1

私は以下のxml形式を持ち、javaの要素を読みたいと思っていました。 XML解析にはとても新しいです。子要素を持つXmlパーサー

<string xmlns="http://tempuri.org/"> 
<IDV><exshowroomPrice>48800</exshowroomPrice><idv_amount>46360</idv_amount><idv_amount_min>39406</idv_amount_min><idv_amount_max>53314</idv_amount_max><exshowroomPrice_min>41480</exshowroomPrice_min><exshowroomPrice_max>56120</exshowroomPrice_max><outputmessage></outputmessage></IDV> 
<string> 

私はこれを加えた後、要素を抽出できません。

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
             DocumentBuilder db = dbf.newDocumentBuilder(); 
             InputSource is = new InputSource(); 
             is.setCharacterStream(new StringReader(responsebuffer.toString())); 
             Document doc = db.parse(is); 
             doc.getDocumentElement().normalize(); 
             System.out.println(doc.getDocumentElement().getTextContent()); 



    NodeList nodes = doc.getChildNodes(); 
            Node no1 = (Node) nodes.item(0); 
            if (doc.getDocumentElement().getChildNodes().getLength() > 0) { 



              if (nodes.item(0).getNodeType() == Node.ELEMENT_NODE) { 
               Element element = (Element) nodes.item(0); 
               NodeList nl =element.getElementsByTagName("exshowroomPrice"); 

               System.out.println(((Node)nl).getNodeValue()); 
              } 


            } 

O/P:<IDV><exshowroomPrice>48800</exshowroomPrice><idv_amount>46360</idv_amount><idv_amount_min>39406</idv_amount_min><idv_amount_max>53314</idv_amount_max><exshowroomPrice_min>41480</exshowroomPrice_min><exshowroomPrice_max>56120</exshowroomPrice_max><outputmessage></outputmessage></IDV>

親切に、事前に 感謝を助けます。

+0

JAXBを使用するDOMでは、RegEx? – Aubin

+1

java用のxmlパーサーは無限にあります。あなたはこれを投稿する前にあなた自身で何かをしましたか? – f1sh

+0

@ f1sh、はい、いろいろなプロセスを試してみました。成功を収めることができませんでした。 – zeet

答えて

0

私はあなたの質問を理解していませんが、あなたのXMLは形式が正しくありません。

あなたの文書を解析するコードが正しいと言えば、個々の要素を抽出する最も簡単な方法はXPathAPIクラスを使用することだと思います。例えば

 Node node = XPathAPI.selectSingleNode(doc, "//string/IDV/exshowroomPrice"); 
     System.out.println(node.getTextContent()); 

UPDATE:

は実際には、XPathAPIは標準ではありませんが、XPathを使用することができます。

 XPath xpath = XPathFactory.newInstance().newXPath(); 
     String val = (String) xpath.evaluate("//string/IDV/exshowroomPrice/text()", doc, XPathConstants.STRING); 
     System.out.println(val); 
+0

@zeetああ、ええ:最後の行はでなく、でなければなりません –

0

は最後に答えを得ました。

try { 

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
            DocumentBuilder db = dbf.newDocumentBuilder(); 
            InputSource is = new InputSource(); 
            is.setCharacterStream(new StringReader(responsebuffer.toString())); 
            Document document = db.parse(is); 
            document.getDocumentElement().normalize(); 
            //System.out.println(document.getDocumentElement().getTextContent()); 

            StringBuilder xmlStringBuilder = new StringBuilder(); 
            xmlStringBuilder.append("<?xml version=\"1.0\"?>"); 
            xmlStringBuilder.append(document.getDocumentElement().getTextContent()); 
            ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder.toString().getBytes("UTF-8")); 
            Document doc = db.parse(input); 

            NodeList nList = doc.getElementsByTagName("IDV"); 
            for (int temp = 0; temp < nList.getLength(); temp++) { 
             Node nNode = nList.item(temp); 
             if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
              Element eElement = (Element) nNode; 


System.out.println(eElement.getElementsByTagName("exshowroomPrice").item(0).getTextContent()); 
System.out.println(eElement.getElementsByTagName("idv_amount").item(0).getTextContent()); 
    System.out.println(eElement.getElementsByTagName("idv_amount_min").item(0).getTextContent()); 
    System.out.println(eElement.getElementsByTagName("idv_amount_max").item(0).getTextContent()); 
System.out.println(eElement.getElementsByTagName("exshowroomPrice_min").item(0).getTextContent()); 
System.out.println(eElement.getElementsByTagName("exshowroomPrice_max").item(0).getTextContent()); 
System.out.println(eElement.getElementsByTagName("outputmessage").item(0).getTextContent()); 




             } 
            } 

            //getElementsByTagName("exshowroomPrice") 

           } catch (Exception e) { 
            e.printStackTrace(); 
           }