java解析xml之DOM解析
来源:互联网 发布:windows帮助与支持 编辑:程序博客网 时间:2024/06/05 17:07
DOM(Document Object Model,文档对象模型),Android 完全支持DOM 解析,利用DOM 中的对象,可以对XML 文档进行读取、搜索、修改、添加和删除等操作。
使用DOM 对XML 文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML 文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档——这就是DOM的工作原理。DOM 实现时首先为XML 文档的解析定义一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,这样代码就可以使用DOM接口来操作整个树结构。
(元素具有属性,文本节点具有文本数据)
节点 (XML 文档中的每一个成分都是一个节点)。
DOM 语法规定:
整个文档是一个节点文档。
每一个XML标签是一个元素节点。
包含在XML元素中的文本是文本节点。
每一个XML属性是一个属性节点。
实例:
解析过程:book.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="12">
<name>Think in java</name>
<price>85.5</price>
</book>
<book id="15" >
<name>Spring in Action</name>
<price>39.2</price>
</book>
</books>
创建一个Book 类,元素包括 (id, name , price)并实现set 与get 与tostring 方法。
创建业务类实现解析 DomService.java
public class DomService {
public DomService() {
}
public List <Book> getBoks ( InputStream inputStream) throws Exception{
List <Book> list =new ArrayList<>();
// 创建一个DOM解析的工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder= factory.newDocumentBuilder();
Document document = builder.parse(inputStream);
// 获得文档的元素节点
Element element = document.getDocumentElement();//
// 解析该元素的节点
NodeList bookNodes =element.getElementsByTagName("book");
for (int i = 0 ; i<bookNodes.getLength();i++){
// 取出节点中的每一个元素
Element bookElement = (Element) bookNodes.item(i);
Book book = new Book ();
book.setId(Integer.parseInt(bookElement.getAttribute("id")));
// 遍历子节点
NodeList childNodes = bookElement.getChildNodes();
for(int j= 0 ; j<childNodes.getLength();j++ ){
// 判断当前节点的名称
if (childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){//判断节点类型
if ("name".equals(childNodes.item(j).getNodeName())){
book.setName(childNodes.item(j).getFirstChild().getNodeValue());
}
else if("price".equals(childNodes.item(j).getNodeName())){
book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
}
}
}
list.add(book);
}
return list;
}
public static void main(String[] args) {
String path = "http://localhost:8080/HelloServlet/book.xml";
InputStream inputStream = HttpUtils.getXML(path);
DomService domService = new DomService();
try {
List <Book > list=domService.getBoks(inputStream);
for (Book book :list ){
System.out.println(book.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3:工具类从服务器获取数据xml文件
public class HttpUtils {
public HttpUtils() {
}
public static InputStream getXML(String path){
InputStream inputStream = null;
try {
URL url = new URL (path);
if (url!= null){
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection .setConnectTimeout(3000);
connection.setDoOutput(true);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if (code==200){
inputStream =connection.getInputStream();
}
}
}catch (Exception e){
}
return inputStream;
}
}
- java之Dom解析XML
- java简单解析xml之Dom解析
- Java 解析 XML 文件之 DOM 解析
- java解析xml之DOM解析
- Java XML解析之DOM解析
- JAVA解析XML文件之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- xml解析之----DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- Android面试题整理
- qt程序运行,有时候出现内存错误
- 单个药品在医生诊间开出来时没有项目名称-------运维日志25
- Binary Search Tree Complete Implementation
- Android 沉浸式状态栏设计以及ContentView获取
- java解析xml之DOM解析
- 常用DOS命令
- 最长递增子序列问题的求解
- 2016年的目标
- 如何准备性能测试数据
- leetcode第19题——*Remove Nth Node From End of List
- [Lintcode]Maximum Subarray
- 佛祖保佑,永无BUG
- LeetCode 120. Triangle 解题报告