2017-01-13 5 views
0

私は以下のコードに従ってXMLを読むことができます。XMLを選択的に読む

これは、入力ファイルのサンプルです:私はちょうど最初PLAN tag.The問題からタグPLAN: "Total-Cost""Actual-Total-Time"情報を読み込む必要がある

<explain> 
    <Query-Text> 
    </Query-Text> 
    <Plan> 
     <Node-Type></Node-Type> 
     <Startup-Cost></Startup-Cost> 
     <Total-Cost></Total-Cost> 
     <Actual-Total-Time></Actual-Total-Time> 
     <Actual-Rows></Actual-Rows> 
     <Actual-Loops></Actual-Loops> 
     <Plans> 
       <Plan> 
         <Node-Type></Node-Type> 
         <Startup-Cost></Startup-Cost> 
         <Total-Cost></Total-Cost> 
         <Actual-Rows></Actual-Rows> 
         <Actual-Loops></Actual-Loops> 
       </Plan> 
      </Plans> 
    </Plan> 
</explain> 

PLANが内部の階層であり、これがされていることですまた読んでください。最初のPLANタグだけを読むのはどうすればいいですか? これは私のコードです:

File fXmlFile = new File("/home/user1/Downloads/LOGT1.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 

doc.getDocumentElement().normalize(); 
System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

NodeList nList = doc.getElementsByTagName("Plan"); 

for (int temp = 0; temp < nList.getLength(); temp++) { 
    //SAMPLE Node nNode = nList.item(temp); 
    System.out.println("\nCurrent Element :" + nNode.getNodeName());        
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {    Element eElement = (Element) nNode; 
     System.out.println("Total Cost query: " + eElement.getElementsByTagName("Total-Cost").item(0).getTextContent()); 
     System.out.println("Actual Total Time query:" + eElement.getElementsByTagName("Actual-Total-Time").item(0).getTextContent()); 
     } 

このコードは、すべてのエラーを発生しませんが、それは望ましい動作に従っていません。

+0

はい、このコードは、このリンクのものと同一である:http://www.guj.com.br/t/melhor-forma-de-ler-xml/ 90593/6 これは必要な方法では機能しません。最初のPLANタグの情報のみを表示する必要があり、それを実行していません。 ヒントはありますか? – Neto

答えて

0

私はあなたがこのような何かを探していると思う:

for (int temp = 0; temp < nList.getLength(); temp++) { //SAMPLE  
    Node nNode = nList.item(temp); 
    if (nNode.getParent().getNodeName().equals("Plans")) { 
     continue; 
    } 
    System.out.println("\nCurrent Element :" + nNode.getNodeName()); 
    ... 
} 
0

だけの値を取得するためにのXPathを使用しています。コードの下には何をしたいあなたを与える:

XPath xPath = XPathFactory.newInstance().newXPath(); 

String Total_Cost = xPath.evaluate("//explain/Plan/Total-Cost/text()", doc).trim(); 
String Actual_Total_Time = xPath.evaluate("//explain/Plan/Actual-Total-Time/text()", doc).trim(); 
関連する問題