[英]How to parse the following xml using DOM parser?
如何使用DOM解析器解析以下xml- name
節點重復到n級
<Services>
<service name ="qwerty" id="">
<File rootProfile="abcd" extension="acd">
<Columns>
<name id="0" profileName="DATE" type="java"></name>
<name id="1" profileName="DATE" type="java"></name>
.
.
.
<Columns>
</File>
<File rootProfile="efg" extension="ghi">
<Columns>
<name id="a" profileName="DATE" type="java"></name>
<name id="b" profileName="DATE" type="java"></name>
.
.
.
<Columns>
</File>
</service>
</Services>
我使用以下代碼獲取值:
public static void xmlEditor() throws SAXException, IOException {
try {
File xmlFile = new File("config/ServiceConfig.xml");
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = null;
documentBuilder = documentFactory.newDocumentBuilder();
org.w3c.dom.Document doc = documentBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
NodeList nodeList0 = doc.getElementsByTagName("Service");
NodeList nodeList1 = doc.getElementsByTagName("File");
NodeList nodeList2 = doc.getElementsByTagName("name");
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
for (int temp0 = 0; temp0 < nodeList0.getLength(); temp0++) {
Node node0 = nodeList0.item(temp0);
System.out.println("\nElement type :" + node0.getNodeName());
Element Service = (Element) node0;
if (node0.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("-----------------" + temp0 + "----------------------------------");
System.out.println("name : " + Service.getAttribute("name"));
System.out.println("id : " + Service.getAttribute("id"));
for (int temp = 0; temp < nodeList1.getLength(); temp++) {
Node node1 = nodeList1.item(temp);
System.out.println("\nElement type :" + node1.getNodeName());
Element File = (Element) node1;
if (node1.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("rootProfile:" + File.getAttribute("rootProfile"));
System.out.println("extension : " + File.getAttribute("extension"));
for (int temp1 = 0; temp1 < nodeList2.getLength(); temp1++) {
Node node2 = nodeList2.item(temp1);
System.out.println("\nElement type :" + node2.getNodeName());
Element name = (Element) node2;
if (node2.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("id:" + name.getAttribute("id"));
System.out.println("profileName : " + name.getAttribute("profileName"));
System.out.println("type : " + name.getAttribute("type"));
}
}
}
}
}
}
}
}
並且正在獲得節點的第一級File
本身正在獲得name
所有值,包括下一個文件節點的幫助,以避免此輸出得到的是
name:-----
id :-----
rootProfile:--------
extension:-----------
id:o
profileName:
type:
id:1
profileName:
type:
id:a
profileName:
type:
id:b
profileName:
rootProfile:--------
extension:-----------
id:o
profileName:
type:
id:1
profileName:
type:
id:a
profileName:
type:
id:b
profileName:
完整的示例已發布。 您可能必須從文件而不是我使用的字符串中讀取XML。
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class MyTester {
public static void main(String[] args) throws IOException, SAXException,
ParserConfigurationException {
xmlEditor();
}
public static void xmlEditor() throws SAXException, IOException,
ParserConfigurationException {
// File xmlFile = new File("ServiceConfig.xml");
String xml = "<Services><service name=\"qwerty\" id=\"\"><File rootProfile=\"abcd\" extension=\"acd\"><Columns>"
+ "<name id=\"0\" profileName=\"DATE\" type=\"java\"></name><name id=\"1\" profileName=\"DATE\" type=\"java\"></name>"
+ "</Columns></File><File rootProfile=\"efg\" extension=\"ghi\"><Columns><name id=\"a\" profileName=\"DATE\" type=\"java\"></name>"
+ "<name id=\"b\" profileName=\"DATE\" type=\"java\"></name></Columns></File></service></Services>";
DocumentBuilderFactory documentFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = null;
documentBuilder = documentFactory.newDocumentBuilder();
// org.w3c.dom.Document doc = documentBuilder.parse(xmlFile);
org.w3c.dom.Document doc = documentBuilder.parse(new InputSource(
new ByteArrayInputStream(xml.getBytes())));
doc.getDocumentElement().normalize();
NodeList nodeList0 = doc.getElementsByTagName("service");
NodeList nodeList1 = null;
NodeList nodeList2 = null;
System.out.println("Root element :"
+ doc.getDocumentElement().getNodeName());
for (int temp0 = 0; temp0 < nodeList0.getLength(); temp0++) {
Node node0 = nodeList0.item(temp0);
System.out.println("\nElement type :" + node0.getNodeName());
Element Service = (Element) node0;
if (node0.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("-----------------" + temp0
+ "----------------------------------");
System.out.println("name : " + Service.getAttribute("name"));
System.out.println("id : " + Service.getAttribute("id"));
nodeList1 = Service.getChildNodes();
for (int temp = 0; temp < nodeList1.getLength(); temp++) {
Node node1 = nodeList1.item(temp);
System.out
.println("\nElement type :" + node1.getNodeName());
Element File = (Element) node1;
if (node1.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("rootProfile:"
+ File.getAttribute("rootProfile"));
System.out.println("extension : "
+ File.getAttribute("extension"));
nodeList2 = File.getChildNodes();// colums
for (int temp1 = 0; temp1 < nodeList2.getLength(); temp1++) {
Element column = (Element) nodeList2.item(temp1);
NodeList nodeList4 = column.getChildNodes();
for (int temp3 = 0; temp3 < nodeList4.getLength(); temp3++) {
Element name = (Element) nodeList4.item(temp3);
if (name.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("id:"
+ name.getAttribute("id"));
System.out.println("profileName : "
+ name.getAttribute("profileName"));
System.out.println("type : "
+ name.getAttribute("type"));
}
}
}
}
}
}
}
}
}
輸出:
根元素:服務
元素類型:service ----------------- 0 ---------------------------- ------名稱:qwerty id:
元素類型:文件rootProfile:abcd擴展名:ACD ID:0 profileName:DATE類型:Java ID:1 profileName:DATE類型:Java
元素類型:文件rootProfile:efg擴展名:ghi id:a profileName:DATE類型:java id:b profileName:DATE類型:java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.