xml文件解析
10
Jdom
JDOM 使用标准的 Java 编码模式,用以来弥补DOM及SAX在实际 应用当中的不足之处。 这些不足之处主要在于SAX没有文档修改、随机访问以及输出的 功能,而对于DOM来说,在使用时来用起来不太方便。 在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。 因为 JDOM 对象就是像 Document、Element 和 Attribute 这些类 的直接实例,因此创建一个新 JDOM 对象就如在 Java 语言中使 用 new 操作符一样容易。而不使用复杂的工厂化模式,使对象操 作更为方便。
5
得到文档模型的根元素 Element root = doc.getDocumentElement(); 元素Element的函数: String getTagName() -得到标签的名字 String getAttribute(“unit”) -得到元素的unit属性值 节点Node的函数: NodeList getChildNodes() - 得到子节点的集合 Node getFirstChild() - 得到第一个子节点 Node getLastChild() - 得到最后一个子节点
16
1. 读取并解析XML文档:
读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和 SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好 处。
// 从文件读取XML,输入文件名,返回XML文档 public Document read(String fileName) throws MalformedURLException, DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); return document; } 2. 取得Root节点 public Element getRootElement(Document doc){ return doc.getRo树
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {// 枚举所有子节点 Element element = (Element) i.next();} for ( Iterator i = root.elementIterator(foo); i.hasNext();) {// 枚举名称为foo的节点 Element foo = (Element) i.next();} // 枚举属性 for ( Iterator i = root.attributeIterator(); i.hasNext(); ) { Attribute attribute = (Attribute) i.next();}
XML文档输出
XMLOutputter outputter=new XMLOutputter(); outputter.output(doc,new FileOutputStream("src\\dom.xml"));
15
Dom4j
Dom4j是一个Java的XML API,类似于 jdom,用来读写XML文件的。它应用于 Java平台,采用了Java集合框架并完全 支持DOM,SAX和JAXP。
8
简单应用程序接口(SAX)
SAX是一种事件驱动的接口,它的基本原理是由接口的 用户提供符合定义的处理器,XML分析时遇到特定的 事件,就去调用处理器中特定事件的处理函数。
捕获和响应各个事件
startDocument( ) 和 endDocument( ) 事件是在文档的起始处 和结束处被激发的 startElement( ) 和 endElement( ) 事件是在遇到起始标记和 结束标记时被激发的 characters( ) 事件是在遇到字符数据时被激发的
XML文件解析
1
XML数据存取机制
将程序所需要的数据写在配置文件中,不将程序代码 写死,当要修改数据时只需修改读取数据的配置文件, 从而很好地解决了代码的移植和重用 例如
在web.config文件中保存数据库连接配置信息, 当你想把数据 库迁移到另一个不同的服务器,你只需要修改web.config文件 中的数据库连接配置信息而已,并不需要重新编译和重新部 署这个应用程序以适应新的服务器的要求。
11
Document类操作
Element root=new Element("GREETING"); Document doc=new Document(root); root.setText("HelloJDOM!");
Attribute 类操作
Attribute rootAttri = new Attribute("comment","introduce myself");//创建名为 commnet,值为 introduce myself 的属性。 rootElement.setAttribute(rootAttri);//将刚创建的属性添加到根元素。
DOM树 DOM树
DOM这个层次的结构是一棵根据XML文档生成的节点树。在这棵节 点树中,有一个根节点--Document节点,所有其他的节点都是根 节点的后代节点。节点树生成之后,就可以通过DOM接口访问、修 改、添加、删除、创建树中的节点和内容。
4
读入xml DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // 获取解析器 DocumentBuilder builder = factory.newDocumentBuilder(); // 解析xml文档 Document doc = builder.parse(new File("src\\dom.xml")); 写回xml TransformerFactory tfactory=TransformerFactory.newInstance(); Transformer tformer = tfactory.newTransformer(); tformer.transform(new DOMSource(doc), new StreamResult(new FileOutputStream("src\\dom1.xml")));
6
节点Node的函数: Node getNextSibling() - 得到下一个兄弟节点 Node getPreviousSibling() - 得到前一个兄弟结点 Node getParentNode() - 得到父节点 NamedNodeMap getAttributes() - 得到所有的属性集合 String getNodeName() - 得到当前节点的名字 String getNodeValue() - 得到当前节点的值 NodeList的函数 int getLength() -得到集合长度 Node item(int index) - 得到集合中的一个元素
解析方式
1.DOM 3.JDOM 2.SAX 4.DOM4J
3
文档对象模型(DOM)
DOM---对象化的XML数据接口 DOM---对象化的XML数据接口 ---对象化的XML
它定义了XML文档的逻辑结构,给出了一种访问和处理XML文档的 方法。利用DOM,程序开发人员可以动态地创建文档,遍历文档结 构,添加、修改、删除文档内容,改变文档的显示方式等等。
9
文档的步骤如下: 使用 SAX 解析 XML 文档的步骤如下:
创建 SAXParserFactory 的实例 创建 SAXParser 的实例 创建 SAXParserHandler 类 使用 parse() 方法解析 XML 文档 SAXParserFactory spfactory = SAXParserFactory.newInstance(); // 生成SAX解析对象 SAXParser parser = spfactory.newSAXParser(); // 指定XML文件,进行XML解析 parser.parse(new File("src\\dom.xml"), new SaxReader());
2
XML文件解析
与采用键值对存储数据的传统配置文件相比,xml文件有良好的 可扩展性,可采用灵活的标记方法,以树结构描述数据。在表达 较短的配置时多采用形式简单易于理解的传统配置文件,但是在 用来表达较为复杂的配置时,xml文件这种有层次性的文件就更 为适合。
Xml解析
读取XML文档并将文档分解为可进行分析的几个元素的过程
7
写XML文档函数
DocumentBuilder 的函数: Document doc = builder.newDocument(); -新建一个模型 Document 的函数: Element createElement(String name) – 建立一个元素 Text createTextNode(String data)-创建一个文本节点 Node的函数: Node appendChild(Node child) - 添加一个子节点 Element 的函数: void setAttribute(String name, String value) - 设置元素的一个属性 和属性值
12
Element类操作
Element root=doc.getRootElement();//获得根元素element List allChildren=root.getChildren();//获得所有子元素的一个list List namedChildren=root.getChildren("name");//获得指定名称子 元素的list Element child=root.getChild(“name”);//获得指定名称的第一个子 元素 allChildren.remove(3);//删除第四个子元素 allChildren.removeAll(root.getChildren("jack"));//删除叫“jack” 的子元素 root.removeChildren("jack");//便捷写法 allChildren.add(new Element("jane"));//加入 root.addContent(new Element(“jane”));//便捷写法