Dom、Dom4J、Sax、JDom、读取(解析)Xml
package model;
import java.io.File;
import java.io.IOException;
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.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/*
* Dom读取xml
*/
public class DomXml {
public DomXml() {
DocumentBuilderFactory documentFacotry=DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder documentBuilder=documentFacotry.newDocumentBuilder();
File f=new File("D:/work/jcpw_z/WebRoot/ampie/ampie_data.xml");
Document document=(Document)documentBuilder.parse(f);
//获取文档的根元素,赋值给rootElement变量 指出节点
Element root=document.getDocumentElement();
//指出节点的子节点
NodeList pie=root.getChildNodes();
if(pie != null)
{
for(int i=0;i< pie.getLength();i++)
{
//输出子节点
Node slice=pie.item(i);
if(slice.getNodeType()==Node.ELEMENT_NODE)
{
//返回节点后的值
String nodess=slice.getTextContent();
//得到属性的 返回指定的节点 节点属性的值
String nodes=slice.getAttributes().getNamedItem("title").getNodeValue();
System.out.println(nodes+":"+nodess);
}
}
}
System.out.println(root.getNodeName());
}
catch(ParserConfigurationException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
catch(SAXException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new DomXml();
}
}
/*
*Dom4J读取xml
*/
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class DomXml {
public static void main(String[] args) {
//使用SAXReader方式读取XML文件
SAXReader reader = new SAXReader();
Document document=null;
try {
//加载数据库XML配置文件,得到Document对象
document = reader.read(new File("D:/work/jcpw_z/WebRoot/ampie/ampie_data.xml"));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获得节点名进行遍历
List list=document.selectNodes( "//pie/slice");
Iterator iter=list.iterator();
while (iter.hasNext()) {
Element element=(Element)iter.next();
//获得属性名
// System.out.println(element.attributeValue("title"));
// System.out.println(element.attributeCount());
//getName()是元素名,getText()是元素值
System.out.println(element.getName()+":"+element.getText());
}
}
}
/*
* SAX读取xml
*/
import java.io.IOException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
// DefaultHandler, 它实现了 ContentHandler, DTDHandler 等 4 个接口 ,更新需要重写相应的方法
public class DomXml extends DefaultHandler {
private StringBuffer buf;
public DomXml() {
super();
}
// public void setDocumentLocator(Locator locator) {
// }
// 开始解析文档
public void startDocument() throws SAXException {
buf = new StringBuffer();
// System.out.println("*******开始解析文档");
}
// 结束解析文档
public void endDocument() throws SAXException {
// System.out.println("文档解析结束*******");
}
// public void startPrefixMapping(String prefix, String uri) {
// System.out.println(" 前缀映射: " + prefix + " 开始!" + " 它的URI是:" + uri);
// }
//
// public void endPrefixMapping(String prefix) {
// System.out.println(" 前缀映射: " + prefix + " 结束!");
// }
//
// public void processingInstruction(String target, String instruction)
// throws SAXException {
// }
//
// public void ignorableWhitespace(char[] chars, int start, int length)
// throws SAXException {
//
// }
//
// public void skippedEntity(String name) throws SAXException {
// }
// 解析元素
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) {
// System.out.println("*******开始解析元素");
System.out.println("元素名:" + qName);
for (int i = 0; i < atts.getLength(); i++) {
System.out.println("属性值:" + atts.getValue(i));
}
}
// 解析元素结束
public void endElement(String namespaceURI, String localName,
String fullName) throws SAXException {
//System.out.println("元素解析结束********");
}
/*
* 该方法接收字符数据的通知。解析器调用这个方法来报告字符数据块。 为了提高解析效率,SAX 解析器会把读取到的所有字符都放在一个字符数组中, 通过
* ch 参数传递给 characters 方法,在该方法中, 若想获取本次字符数据事件中读到的字符数据,需要使用 start 和 length 参数
*/
//文档从上到下的元素
public void characters(char[] chars, int start, int length)
throws SAXException {
// 将元素内容累加到StringBuffer中
String content = new String(chars, start, length);
System.out.println("元素值:" + content);
buf.append(chars, start, length);
}
public static void main(String args[]) {
try {
/*
* SAX 解析工厂 与 DOM 类似,JAXP 也为 SAX 解析器提供了工厂类: SAXParserFactory 类 JAXP
* 中定义的 SAX 解析器类是 SAXParser. SAXParser 类是 XMLReader 实现类的一个包装类 可以调用
* SAXParser 中的 parse() 方法来解析 XML 文档
*/
// 得到SAXParserFactory实例
SAXParserFactory sf = SAXParserFactory.newInstance();
// 得到 SAXParser 解析器对象
SAXParser sp = sf.newSAXParser();
// 利用 SAX 解析 XML 文档,并且向解析器注册一个事件监听器(常用的事件监听器事件有: characters;
// endDocument; endElement )
DomXml testsax = new DomXml();
sp.parse(new InputSource(
"D:/work/jcpw_z/WebRoot/ampie/ampie_data.xml"), testsax);
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
* jDom读取xml
*/
import java.io.File;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class DomXml {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
try {
//用无变元构造函数构造一个SAXBuilder对象, 用sax解析器从文件中构造文档,
// SAXBuilder侦听sax事件并从内存中建立一个相应的文档
SAXBuilder sb=new SAXBuilder();
//读入指定文件
String name="D:/work/jcpw_z/WebRoot/ampie/ampie_data.xml";
Document doc=sb.build(new File(name));
获得这个文档的节点实例
Element root=doc.getRootElement(); //HD
if (root==null) {
System.out.println("root is null");
return;
} else {
System.out.println(root.getName());
}
//将根节点下的所有子节点放入List中
List list=root.getChildren(); //child
for(int i=0;i<list.size();i++) {
// 得到第一个子元素的子元素
Element element=(Element) list.get(i);
String nametext=element.getAttributeValue("title");
System.out.println("title:" + nametext);
// List idChildElements = element.getChildren();
System.out.println("元素值:" + element.getText());
// for (int k=0;k<idChildElements.size();k++) {
// Element element2=(Element) idChildElements.get(k);
// System.out.println(element2.getValue());
// }
}
} catch (Exception e) {
e.printStackTrace();
}
}
}