在JAVA中使用DOM来解析XML文档。
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class Domcustomer {
public static void main(String[] args) {
try {
// 创建解析工厂
DocumentBuilderFactory dbfactory = DocumentBuilderFactory .newInstance();
// 指定DocumentBuilder
DocumentBuilder builder = dbfactory.newDocumentBuilder();
// 从文件构造一个Document,"sample.xml"为要解析的xml文件名
Document doc = builder.parse(new File("sample.xml"));
// 得到Document的根
Element root = doc.getDocumentElement();
System.out.println("The root tag name is :" + root.getTagName());
System.out.println("*****get tag value*****");
// 根据指定的Tag名得到element对象的list.
NodeList list = root.getElementsByTagName("row");
System.out.println(list.getLength());
// 查询list中所有的项
for (int i = 0; i < list.getLength(); i++) {
// 得到list的所有element对象
Element element = (Element) list.item(i);
// 获得此element中的tag名为id的list,此list中的对象仍是element类型
NodeList titleid = element.getElementsByTagName("id");
// 获得id元素,id应该是最后一层的element,其结构如:<id>55</id>
Element idElement = (Element) titleid.item(0);
// 获得id元素的第一个值
String id = idElement.getFirstChild().getNodeValue();
System.out.println("ID :" + " " + id);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
对应的xml文档如:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<axl:executeSQLQueryResponse xmlns:axl="http://www.cisco.com/AXL/1.0" xmlns:xsi="http://www.cisco.com/AXL/1.0" sequence="1209876883406">
<return>
<row>
<pkid>281c3155-9a32-4fb5-bcf8-4d8aa03b72a3</pkid>
<name>MTP_2</name>
<description>MTP_gzyccm504</description>
<tkmodel>110</tkmodel>
<tkdeviceprotocol>6</tkdeviceprotocol>
</row>
<row>
.......
</row>
</return>
</axl:executeSQLQueryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
即可以由Document的根(SOAP-ENV:Envelope)直接通过element的方法getElementsByTagName()直接得到想要的数据对应的list,如得到row对应的NodeList。
此种解析可以用在通过web service得到的SOAP标准的xml文档。
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class Domcustomer {
public static void main(String[] args) {
try {
// 创建解析工厂
DocumentBuilderFactory dbfactory = DocumentBuilderFactory .newInstance();
// 指定DocumentBuilder
DocumentBuilder builder = dbfactory.newDocumentBuilder();
// 从文件构造一个Document,"sample.xml"为要解析的xml文件名
Document doc = builder.parse(new File("sample.xml"));
// 得到Document的根
Element root = doc.getDocumentElement();
System.out.println("The root tag name is :" + root.getTagName());
System.out.println("*****get tag value*****");
// 根据指定的Tag名得到element对象的list.
NodeList list = root.getElementsByTagName("row");
System.out.println(list.getLength());
// 查询list中所有的项
for (int i = 0; i < list.getLength(); i++) {
// 得到list的所有element对象
Element element = (Element) list.item(i);
// 获得此element中的tag名为id的list,此list中的对象仍是element类型
NodeList titleid = element.getElementsByTagName("id");
// 获得id元素,id应该是最后一层的element,其结构如:<id>55</id>
Element idElement = (Element) titleid.item(0);
// 获得id元素的第一个值
String id = idElement.getFirstChild().getNodeValue();
System.out.println("ID :" + " " + id);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
对应的xml文档如:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<axl:executeSQLQueryResponse xmlns:axl="http://www.cisco.com/AXL/1.0" xmlns:xsi="http://www.cisco.com/AXL/1.0" sequence="1209876883406">
<return>
<row>
<pkid>281c3155-9a32-4fb5-bcf8-4d8aa03b72a3</pkid>
<name>MTP_2</name>
<description>MTP_gzyccm504</description>
<tkmodel>110</tkmodel>
<tkdeviceprotocol>6</tkdeviceprotocol>
</row>
<row>
.......
</row>
</return>
</axl:executeSQLQueryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
即可以由Document的根(SOAP-ENV:Envelope)直接通过element的方法getElementsByTagName()直接得到想要的数据对应的list,如得到row对应的NodeList。
此种解析可以用在通过web service得到的SOAP标准的xml文档。