对于XML处理方面,W3C有两种解决方法:
(1)DOM(Document Object Model):
(2)SAX(Simple API for XML)
DOM介绍:
先将xml文档解析成dom树,并放入内存,能够随机访问任意节点。
缺点:因为需要放入内存操作,所以对文件大小有限制。
DOM位于org.w3c.dom包中。
DOM有3个核心的接口:
(1)Document:是整个文档的根结点。只有取得了Document结点,才能够对文档操作。
常用方法:
(1)Element elem = document.createElement("elem"); //创建一个结点
(2)Attribute attr = document.createAttribute("attr"); //创建一个属性
(3)Text t = document.createTextNode("text"); //创建一个文本节点
(4)NodeList list = document.getElementByTagName("..."); //寻找某个结点
(2)Node:DOM树是由结点组成,因此结点是很重要的。
常用方法:
(1)appendChild(Node child); //添加子节点
(2)getFirstChild(); //获得第一个子节点
(3)getNodeValue(); //得到节点的值
(4)hasChildNodes(); //是否还有子节点
(3)NodeList:是由Node组成的一个List。
常用方法:
(1)item(int x); //获得第几个节点
(2)getLength(); //获得list的长度
如果要获得Document对象,需要:
------------------------------------------------------------
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("....");获得doc |
------------------------------------------------------------
生成xml文件方法:需要TransformerFactory,Transformer,StreamResult,DOMSource。
方法:
Document doc = builder.newDocument(); 生成DOM树 StreamResult result = new StreamResult(new File("...")); DOMSource source = new DOMSource(doc); TransformerFactory factory = TransformerFactory.newInstance(); Transformer t = factory.newTransformer(); t.transform(source,result);即可 |
SAX介绍:
只能读取,不能生成或改变,并且只能遍历。
缺点:只能读取。
XML解析工具:
(1)DOM4J
DOM4J是一个XML操作的包,为了提供给用户更简便的操作XML。
以下是生成一个XML文件的代码:
Document doc = DocumentHelper.createDocument(); Element name = doc.addElement("name"); Element first = name.addElement("firstname"); Element second = name.addElement("secondname"); first.setText("xia"); second.setText("second"); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); XMLWriter writer = new XMLWriter(new FileOutputStream("out.xml"),format); writer.write(doc); writer.close(); |
以下是读取一个XML文件的代码:
SAXReader reader = new SAXReader(); Document doc = reader.read(new File("out.xml")); Element root = doc.getRootElement(); Iterator iter = root.elementIterator(); Element elem = (Element)iter.next(); String str = elem.elementText("first"); |
(2)JDOM:也是一个非常好的解析工具,但是性能上比DOM4J差了不少,所以不用。
Javascript中运用DOM:把html想象成一个DOM树。
这里通过id进行查找。
var elem = document.getElementById("id");
elem.innerHTML
生成一个<input type = "button" value = "button"/>过程:
var form = document.getElementById("form");//获得表单节点 Element button = document.createElement("input");//创建一个节点 button.setAttribute("type","button");//设置属性 button.setAttribute("value","button");//设置属性 form.appendChild(button);//添加form的子节点 |