Xml解析
一、方式
1. DOM解析
JAXP sun公司
JDOM 第三方
DOM4J 第三方 最好用
2. Sax解析
原装SAX解析 sun公司
二、DOM
DOM树
|
理解:将文档解析成文档对象,并且文档中的各项内容都被封装成了单独但有关系的对象节点(node),通过对树中节点的操作就能实现对文档的操作。
三、DOM4J使用方法
1. 在项目根目录下添加lib文件夹
2. 将dom4j-1.6.1.jar复制到lib文件夹中
3. 右键单击jar包——Build path——Add to build path
4. 结合文档index.html中的,见下图
四、读取xml
常用方法
获取节点或标签
// 创建解析器对象 SAXReader reader = new SAXReader(); // 通过解析器对象得到文档对象 Document doc = reader.read("src/students.xml");
//得到当前对象的所有子节点(迭代器) Iterator<Node> it = doc.nodeIterator();
//根据名称获得指定元素方法 Element ele = root.element("student");
// 获取当前元素下的所有子元素(迭代器) Iterator<Element> it = ele.elementIterator();
// 获取当前元素下的所有子元素(集合) List<Element> li = ele.elements();
|
获取属性
注:只有标签才有属性,所以应先获取标签。
//获取属性迭代器 Iterator<Attribute> it = ele.attributeIterator();
//获取属性集合 List<Attribute> li = ele.attributes(); |
获取文本
//先获取标签对象 Element ele = doc.getRootElement().element("student").element("name"); //获取标签对象的文本 Ele.getText();
//先获取父标签对象 Element ele = doc.getRootElement().element("student"); //通过父标签直接获取自标签对象的文本 ele.elementText("name");
|
五、创建xml
使用对象XMLWriter将文本对象(Document)写出到指定的xml文件中。
//OutputFormat format = OutputFormat.createPrettyPrint();//漂亮的格式 OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式 //设置编码 format.setEncoding("GBK"); XMLWriter writer = new XMLWriter(new FileOutputStream( "d:\\students.xml"),format); writer.write(doc); writer.close(); |
常用添加方法
//添加标签(根标签只能添加一个) doc.addElement("students"); //给指定的标签添加属性 ele1.addAttribute("id", "1"); //给指定的标签添加文本 name.addText("赵健"); |
常用删除方法
//删除标签方法 Element ele = (Element)doc.getRootElement().elements().get(0); // ele.detach(); //元素本身的删除方法 Element name = ele.element("name"); //通过父元素删除子元素 name.getParent().remove(name);
//删除属性同标签 |
常用修改方法
//修改标签方法 Element ele = doc.getRootElement().element("student"); //ele.setName("a"); //修改标签名称 //ele.setText("趙雲"); //修改标签文本
//修改标签属性 //先得到标签对象 Element ele = doc.getRootElement().element("student"); //得到属性对象 Attribute att = ele.attribute(0); //设置属性值 att.setValue("3"); |
五、XPath
用法:
添加jaxen-1.1-beta-6.jar到lib文件夹,且Add to build path
(注:核心包不能少)
/ 绝对路径,表示从根标签开始 // 相对路径 * 通配符 [] 指定条件 @ 指定属性
|
六、Sax解析
用法:参考Sun官方API中的,SAXParser类
注:DefaultHandler是基类,基类一般需要自定义子类。
//创建工厂对象 SAXParserFactory factory = SAXParserFactory.newInstance(); //创建解析器对象 SAXParser parser = factory.newSAXParser(); InputStream is = new FileInputStream("src\\students.xml"); MyDefaultHandler dh = new MyDefaultHandler(); parser.parse(is,dh); |
SAX的优势
这种处理非常象流的好处;可以立即开始分析,而不是必须等待所有要处理的数据。
由于应用程序简单地检查经过其的数据,所以不需要将数据存储在内存里。当遇到大文档时,这是一个突出的优势。
一般来讲,SAX 还比DOM快。
SAX的劣势
由于应用程序不以任何方式存储数据,所以,使用 SAX 时,不可能对数据进行更改。
选择 DOM 还是 SAX,这取决于几个因素:
应用程序的目的:如果必须对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM。
数据的数量:对于大文件,SAX 是更好的选择。
将如何使用数据:如果实际上只使用一小部分数据,则使用 SAX 将数据抽取到应用程序中,这种方法更好些。
需要速度:通常,SAX 实现比 DOM 实现快。