DOM XML Parser Example

后端 未结 3 1431
春和景丽
春和景丽 2020-11-30 10:46

I have this XML file.I just parse this XML file.This example shows how to get the node by “name”, and display the value.How to show all records from database?



        
相关标签:
3条回答
  • 2020-11-30 11:09

    I don't think your XML is valid -- you're only allowed to have one root element in XML.

    So when you do:

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

    You're only going to get one element. which is that first <record>...</record>

    In order to fix this, you'll need to wrap all of your <record> tags in some sort of a root element like this:

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

    and you'll have to say:

    NodeList nList = doc.getDocumentElement().getElementsByTagName("record");
    
    0 讨论(0)
  • 2020-11-30 11:11

    The xml is not valid. (You can validate your xml online: http://www.w3schools.com/xml/xml_validator.asp)

    You can try with this 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>
    

    and keep your code

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

    and you will have this result

    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 讨论(0)
  • 2020-11-30 11:21

    You can try this code in the loop.

    Node nNode = nList.item(temp);
    NodeList list = nNode.getChildNodes();
    list.item(0).getTextContent();
    
    0 讨论(0)
提交回复
热议问题