Пример XML Parser DOM

У меня есть этот файл XML. Я просто разбираю этот файл XML. В этом примере показано, как получить узел по имени и отобразить значение. Как показать все записи из базы данных?

  1 1.0 Hack off tiles and make good walls 100 50 20 5000   1 1.03 Test 45 100 4500 0   

и так далее

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

В этом просто показывается первая запись. Я хочу отобразить все записи в базе данных

Недопустимый xml. (Вы можете проверить свой xml онлайн: http://www.w3schools.com/xml/xml_validator.asp )

Вы можете попробовать с этим xml

   1 1.0 Hack off tiles and make good walls 100 50 20 5000   1 1.03 Test 45 100 4500 0   Номер   1 1.0 Hack off tiles and make good walls 100 50 20 5000   1 1.03 Test 45 100 4500 0   Номер   1 1.0 Hack off tiles and make good walls 100 50 20 5000   1 1.03 Test 45 100 4500 0   Номер   1 1.0 Hack off tiles and make good walls 100 50 20 5000   1 1.03 Test 45 100 4500 0   Номер   1 1.0 Hack off tiles and make good walls 100 50 20 5000   1 1.03 Test 45 100 4500 0   

и сохраните свой код

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

и вы получите этот результат

 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 

Я не думаю, что ваш XML действителен – вам разрешено иметь только один корневой элемент в XML.

Поэтому, когда вы это делаете:

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

Вы получите только один элемент. который является первым ...

Чтобы исправить это, вам нужно обернуть все ваши tags в каком-то корневом элементе, например:

   1   2  ...  

и вам придется сказать:

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

Вы можете попробовать этот код в цикле.

 Node nNode = nList.item(temp); NodeList list = nNode.getChildNodes(); list.item(0).getTextContent(); 
  • Преобразование XML-файла в CSV-файл с помощью java
  • Создание сборки Xml Serialization как части моей сборки
  • Spring v3 нет объявления для элемента 'mvc: resources'
  • Проверка XML в отношении XSD с ссылкой на C #
  • Создание XML-документа с использованием пространств имен в Java
  • Перемещение и исчезновение строк кода; проблема с XML-редактором Eclipse
  • Изменение цвета фона панели действий с помощью AppCompat
  • Ошибка XML: существует несколько корневых элементов
  • Специальный символ в запросе XPATH
  • Как читать хорошо сформированный XML в Java, но пропустить схему?
  • Можно ли рисовать прямоугольник в XML?
  • Давайте будем гением компьютера.