使用DOM 解析XML文档
2014-06-18 10:56
429 查看
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="chenyuzhu">
<name>JAVA</name>
<price>20.00</price>
</book>
<book email="chenyuzhu1">
<name>C#</name>
<price>10.00</price>
</book>
</books>
JAVA类
package domxml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 DomDemo
{
public DomDemo()
{
// 得到DOM解析器的工厂实例
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
try
{
// 从DOM工厂获得DOM解析器
DocumentBuilder builder = domfac.newDocumentBuilder();
// 把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream inputStream = new FileInputStream("src/book.xml");
// 解析XML文档的输入流,得到一个Document对象
Document document = builder.parse(inputStream);
// 得到XML文档的根节点
Element element = document.getDocumentElement();
// 得到节点的子节点
NodeList books = element.getChildNodes();
if (books != null)
{
for (int i = 0; i < books.getLength(); i++)
{
Node book = books.item(i);
// 取得节点的属性值
if (book.getNodeType() == Node.ELEMENT_NODE)
{
{
String email = book.getAttributes().getNamedItem("email").getNodeValue();
System.out.println(email);
// 轮循子节点
for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling())
{
if (node.getNodeType() == Node.ELEMENT_NODE)
{
if (node.getNodeName().equals("name"))
{
// name是一个空值,因为DOM把<name>JAVA</name>也当作是两层结构的节点,其父节点是<name>,子节点JAVA才是我们真正想得到的。
String name = node.getNodeValue();
String name1 = node.getFirstChild().getNodeValue();
System.out.println("=====name====" + name + "======name1=====" + name1);
}
if (node.getNodeName().equals("price"))
{
String price = node.getFirstChild().getNodeValue();
System.out.println(price);
}
}
}
}
}
}
}
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (SAXException e)
{
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
{
new DomDemo();
}
}
打印结果:
chenyuzhu
=====name====null======name1=====JAVA
20.00
chenyuzhu1
=====name====null======name1=====C#
10.00
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="chenyuzhu">
<name>JAVA</name>
<price>20.00</price>
</book>
<book email="chenyuzhu1">
<name>C#</name>
<price>10.00</price>
</book>
</books>
JAVA类
package domxml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 DomDemo
{
public DomDemo()
{
// 得到DOM解析器的工厂实例
DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
try
{
// 从DOM工厂获得DOM解析器
DocumentBuilder builder = domfac.newDocumentBuilder();
// 把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream inputStream = new FileInputStream("src/book.xml");
// 解析XML文档的输入流,得到一个Document对象
Document document = builder.parse(inputStream);
// 得到XML文档的根节点
Element element = document.getDocumentElement();
// 得到节点的子节点
NodeList books = element.getChildNodes();
if (books != null)
{
for (int i = 0; i < books.getLength(); i++)
{
Node book = books.item(i);
// 取得节点的属性值
if (book.getNodeType() == Node.ELEMENT_NODE)
{
{
String email = book.getAttributes().getNamedItem("email").getNodeValue();
System.out.println(email);
// 轮循子节点
for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling())
{
if (node.getNodeType() == Node.ELEMENT_NODE)
{
if (node.getNodeName().equals("name"))
{
// name是一个空值,因为DOM把<name>JAVA</name>也当作是两层结构的节点,其父节点是<name>,子节点JAVA才是我们真正想得到的。
String name = node.getNodeValue();
String name1 = node.getFirstChild().getNodeValue();
System.out.println("=====name====" + name + "======name1=====" + name1);
}
if (node.getNodeName().equals("price"))
{
String price = node.getFirstChild().getNodeValue();
System.out.println(price);
}
}
}
}
}
}
}
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (SAXException e)
{
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args)
{
new DomDemo();
}
}
打印结果:
chenyuzhu
=====name====null======name1=====JAVA
20.00
chenyuzhu1
=====name====null======name1=====C#
10.00
相关文章推荐
- Java学习之路——使用DOM解析XML文档
- Android -使用DOM(文档对象模型)解析XML文件
- 使用DOM来解析XML文档
- 使用DOM解析XML文档
- Android 使用Dom与SAX解析xml文档的方式
- 使用DOM解析XML文档示例(Java)
- 解析XML文档之三:使用DOM解析
- 使用DOM,SAX解析XML文档
- 使用JAXP对XML文档进行DOM解析
- 使用DOM解析XML文档
- 使用DOM技术来对XML文档进行解析范例
- 使用JAXP的DOM方式解析XML文档(能力工场)
- XML第十四讲:使用DOM解析XML文档 续
- ML的DOM解析 Java实现 使用递归解析一个XML文档
- android中使用SAX, DOM, 或者pull 来解析XML文档
- 使用JAXP对xml文档进行Dom解析
- Android -使用DOM(文档对象模型)解析XML文件
- Android -使用DOM(文档对象模型)解析XML文件
- 使用DOM解析XML文档
- xml的文档使用jaxp的DOM解析的详细案例