2013-10-16 12 views
5

Ho questo file XML. Analizzo solo questo file XML. Questo esempio mostra come ottenere il nodo con "nome" e visualizzare il valore. Come mostrare tutti i record dal database?Esempio di parser XML DOM

<data399173_eff_sor> 
<record> 
    <ID>1</ID> 
    <item_no>1.0</item_no> 
    <description>Hack off tiles and make good walls</description> 
    <price>100</price> 
    <base_qty>50</base_qty> 
    <var_qty>20</var_qty> 
    <base_price_>5000</base_price_> 
</record> 
<record> 
    <ID>1</ID> 
    <item_no>1.03</item_no> 
    <description>Test</description> 
    <price>45</price> 
    <base_qty>100</base_qty> 
    <var_qty>4500</var_qty> 
    <base_price_>0</base_price_> 
</record> 
</data399173_eff_sor> 

e così via

codice Java

File fXmlFile = new File("D:/formdata.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("record"); 

    System.out.println("----------------------------"); 

    for (int temp = 0; temp < nList.getLength(); temp++) { 

     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("Item No : " + eElement.getElementsByTagName("item_no").item(0).getTextContent()); 
      System.out.println("Description : " + eElement.getElementsByTagName("description").item(0).getTextContent()); 
      System.out.println("price : " + eElement.getElementsByTagName("price").item(0).getTextContent()); 
      System.out.println("base qty : " + eElement.getElementsByTagName("base_qty").item(0).getTextContent()); 
      System.out.println("Var qty : " + eElement.getElementsByTagName("var_qty").item(0).getTextContent()); 
      System.out.println("Base price : " + eElement.getElementsByTagName("base_price_").item(0).getTextContent());     

     } 

In questo il suo solo mostrare prima record.i desidera visualizzare tutti i record nel database

+0

Ho modificato il mio file XML.Ora questo è il file originale che ho scaricato dal server – Aanshi

risposta

3

Non credo il tuo XML è valido: ti è permesso avere un solo elemento radice in XML.

Così, quando lo fai:

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

Stai solo andando a ottenere un elemento. che è quella prima <record>...</record>

Per risolvere questo problema, è necessario avvolgere tutti i tuoi <record> tag in una sorta di un elemento radice come questo:

<root> 
    <record> 
    <id>1</id> 
    </record> 
    <record> 
    <id>2</id> 
    </record> 
    ... 
</root> 

e dovrai dire :

NodeList nList = doc.getDocumentElement().getElementsByTagName("record"); 
+0

No. NodeList nList = doc.getElementsByTagName ("record") significa che gestirà solo elementi record – Aanshi

0

È possibile provare questo codice nel ciclo.

Node nNode = nList.item(temp); 
NodeList list = nNode.getChildNodes(); 
list.item(0).getTextContent(); 
8

Il xml non è valido. (È possibile convalidare il tuo xml on-line: http://www.w3schools.com/xml/xml_validator.asp)

Si può provare con questo xml

<records> 
<record> 
    <ID>1</ID> 
    <item_no>1.0</item_no> 
    <description>Hack off tiles and make good walls</description> 
    <price>100</price> 
    <base_qty>50</base_qty> 
    <var_qty>20</var_qty> 
    <base_price_>5000</base_price_> 
</record> 
<record> 
    <ID>1</ID> 
    <item_no>1.03</item_no> 
    <description>Test</description> 
    <price>45</price> 
    <base_qty>100</base_qty> 
    <var_qty>4500</var_qty> 
    <base_price_>0</base_price_> 
</record> 
</records> 

e mantenere il vostro codice di

package test; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import java.io.File; 
import java.io.IOException; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 


public class TestXml{ 
public static void main (String[] args) throws ParserConfigurationException{ 
    TestXml t = new TestXml(); 
    t.readXml() ; 
    } 
public void readXml() throws ParserConfigurationException{ 
    File fXmlFile = new File("D:/formdata.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = null; 
    try { 
     doc = dBuilder.parse(fXmlFile); 
    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    doc.getDocumentElement().normalize(); 

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

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

    System.out.println("----------------------------"); 

    for (int temp = 0; temp < nList.getLength(); temp++) { 

     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("Item No : " + eElement.getElementsByTagName("item_no").item(0).getTextContent()); 
      System.out.println("Description : " + eElement.getElementsByTagName("description").item(0).getTextContent()); 
      System.out.println("price : " + eElement.getElementsByTagName("price").item(0).getTextContent()); 
      System.out.println("base qty : " + eElement.getElementsByTagName("base_qty").item(0).getTextContent()); 
      System.out.println("Var qty : " + eElement.getElementsByTagName("var_qty").item(0).getTextContent()); 
      System.out.println("Base price : " + eElement.getElementsByTagName("base_price_").item(0).getTextContent());     

     }}}} 

e avrete questo risultato

Root element :records 
---------------------------- 

Current Element :record 
Item No : 1.0 
Description : Hack off tiles and make good walls 
price : 100 
base qty : 50 
Var qty : 20 
Base price : 5000 

Current Element :record 
Item No : 1.03 
Description : Test 
price : 45 
base qty : 100 
Var qty : 4500 
Base price : 0 
+0

Io provo questo, ma l'output è lo stesso – Aanshi

+0

Ho provato con il tuo nuovo xml e funziona. Puoi provare con il codice java che ho postato e mostrare il risultato. – fazerty

+0

sì, ho provato il tuo codice. elemento radice: _data399173_eff_sor ---------------------------- Elemento corrente: record di No. dell'articolo: 1.0 Descrizione: Hack off piastrelle e fare buon pareti prezzo: 100 base di qty: 50 Var qty: 20 prezzo base: 5000 No. dell'articolo: 1.01 Descrizione: break up piano nella zona di doccia (massetto o conc prezzo: 4 di base qty : 1000 Var qty: 0 Prezzo base: 4000 – Aanshi

Problemi correlati