Домой java Как читать XML-файл в Java — (DOM Parser)

Как читать XML-файл в Java — (DOM Parser)

986
0

В этом руководстве мы покажем вам, как читать XML-файл с помощью анализатора XML DOM . Анализатор DOM анализирует весь XML-документ и загружает его в память; затем моделирует его в структуре «ДЕРЕВО» для легкого обхода или манипуляции

Короче говоря, он превращает XML-файл в DOM или древовидную структуру, и вам приходится обходить узел за узлом, чтобы получить то, что вы хотите.

Что такое узел?
В DOM все в документе XML является узлом, прочитайте это . Предупреждение
DOM Parser работает медленно и потребляет много памяти, когда загружает XML-документ, который содержит много данных. Пожалуйста, рассмотрите парсер SAX как решение для этого, SAX быстрее чем DOM и использует меньше памяти.

1. Пример DOM XML Parser

В этом примере показано, как получить узел по «имени» и отобразить значение.

/Users/mkyong/staff.xml





yong
mook kim
mkyong
100000


low
yin fong
fong fong
200000


ReadXMLFile.java


package com.csharpcoderr.seo;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class ReadXMLFile {

public static void main(String argv[]) {

try {

File fXmlFile = new File("/Users/mkyong/staff.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);

// необязательно, но рекомендуется
// читать это - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();

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

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

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("Staff id : " + eElement.getAttribute("id"));
System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());

}
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

Результат


Root element :company
----------------------------

Current Element :staff
Staff id : 1001
First Name : yong
Last Name : mook kim
Nick Name : mkyong
Salary : 100000

Current Element :staff
Staff id : 2001
First Name : low
Last Name : yin fong
Nick Name : fong fong
Salary : 200000

2. Зацикливание узла

Этот пример читает то же самое staff.xml и показывает вам, как зациклить узел один за другим, и распечатать имя и значение узла, а также атрибут, если таковой имеется.

ReadXMLFile2.java


package com.csharpcoderr.seo;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile2 {

public static void main(String[] args) {

try {

File file = new File("/Users/mkyong/staff.xml");

DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();

Document doc = dBuilder.parse(file);

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

if (doc.hasChildNodes()) {

printNote(doc.getChildNodes());

}

} catch (Exception e) {
System.out.println(e.getMessage());
}

}

private static void printNote(NodeList nodeList) {

for (int count = 0; count < nodeList.getLength(); count++) {

Node tempNode = nodeList.item(count);

// убедитесь, что это элементный узел
if (tempNode.getNodeType() == Node.ELEMENT_NODE) {

// получаем имя и значение узла
System.out.println("nNode Name =" + tempNode.getNodeName() + " [OPEN]");
System.out.println("Node Value =" + tempNode.getTextContent());

if (tempNode.hasAttributes()) {

// получаем имена и значения атрибутов
NamedNodeMap nodeMap = tempNode.getAttributes();

for (int i = 0; i < nodeMap.getLength(); i++) {

Node node = nodeMap.item(i);
System.out.println("attr name : " + node.getNodeName());
System.out.println("attr value : " + node.getNodeValue());

}

}

if (tempNode.hasChildNodes()) {

// цикл снова, если есть дочерние узлы
printNote(tempNode.getChildNodes());

}

System.out.println("Node Name =" + tempNode.getNodeName() + " [CLOSE]");

}

}

}

}

Результат:


Root element :company

Node Name =company [OPEN]
Node Value =

yong
mook kim
mkyong
100000


low
yin fong
fong fong
200000



Node Name =staff [OPEN]
Node Value =
yong
mook kim
mkyong
100000

attr name : id
attr value : 1001

Node Name =firstname [OPEN]
Node Value =yong
Node Name =firstname [CLOSE]

Node Name =lastname [OPEN]
Node Value =mook kim
Node Name =lastname [CLOSE]

Node Name =nickname [OPEN]
Node Value =mkyong
Node Name =nickname [CLOSE]

Node Name =salary [OPEN]
Node Value =100000
Node Name =salary [CLOSE]
Node Name =staff [CLOSE]

Node Name =staff [OPEN]
Node Value =
low
yin fong
fong fong
200000

attr name : id
attr value : 2001

Node Name =firstname [OPEN]
Node Value =low
Node Name =firstname [CLOSE]

Node Name =lastname [OPEN]
Node Value =yin fong
Node Name =lastname [CLOSE]

Node Name =nickname [OPEN]
Node Value =fong fong
Node Name =nickname [CLOSE]

Node Name =salary [OPEN]
Node Value =200000
Node Name =salary [CLOSE]
Node Name =staff [CLOSE]
Node Name =company [CLOSE]

Заметка
Вы можете заинтересоваться этим Как получить Alexa Рейтинг в Java . Он показывает, как использовать DOM для анализа результатов Alexa XML.

Рекомендации

  1. Когда использовать DOM
  2. Нормализация в разборе DOM с Java - как это работает?
  3. Узнайте XML DOM
  4. Что такое узел?
  5. Что такое элемент?

Дом Java XML

Как читать XML-файл в Java — (DOM Parser)

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Mac OSX - где находится папка localhost по умолчанию?

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь