2013-10-16 12 views
5

Mam ten plik XML. Po prostu parsuję ten plik XML. Ten przykład pokazuje, jak uzyskać węzeł według "nazwy" i wyświetlić wartość. Jak wyświetlić wszystkie rekordy z bazy danych?DOM Parser XML Przykład

<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> 

i tak dalej

Java kod

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());     

     } 

W ten jej tylko pokazać pierwszy record.i chcesz wyświetlić wszystkie rekordy w bazie danych

+0

Edytowałem mój plik XML. Teraz jest to oryginalny plik pobrany z serwera – Aanshi

Odpowiedz

3

nie sądzę Twój XML jest prawidłowy - możesz mieć tylko jeden element główny w XML.

Więc kiedy zrobić:

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

jesteś tylko dostanie jeden element. który jest pierwszym <record>...</record>

W celu ustalenia tego, trzeba zawinąć wszystkich <record> znaczników w jakimś elemencie głównym jak ten:

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

i trzeba powiedzieć, :

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

No. NodeList nList = doc.getElementsByTagName ("record") oznacza, że ​​będzie obsługiwać tylko elementy rekordów. – Aanshi

0

Możesz spróbować tego kodu w pętli.

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

Plik XML jest nieprawidłowy. (Można zweryfikować xml ONLINE: http://www.w3schools.com/xml/xml_validator.asp)

można spróbować z tym 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> 

i zachować swój kod

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());     

     }}}} 

i trzeba będzie ten wynik

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

Próbuję tego, ale wynik jest taki sam – Aanshi

+0

Próbowałem z twoim nowym xmlem i działa. Czy możesz spróbować z opublikowanym przeze mnie kodem java i pokazać wynik. – fazerty

+0

Tak, wypróbowałem twój kod. Podaje następujący wynik. element główny: _data399173_eff_sor ---------------------------- bieżącego elementu: zapis Pozycja nr: 1,0 Opis: Hack off płytki i naprawia ściany cena: 100 baza Ilość: 50 Var Ilość: 20 cena podstawowa: 5000 Pozycja nr: 1,01 Opis: Zerwać podłogi w obszarze prysznicem (jastrychu lub timbe cena: 4 bazowy Ilość : 1000 Var qty: 0 Cena podstawowa: 4000 – Aanshi

Powiązane problemy