首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

DOM生成、解析XML资料

2012-10-30 
DOM生成、解析XML文件所有现代浏览器都有读取和操作 XML 的内建 XML 解析器。解析器把 XML 载入内存,然后把

DOM生成、解析XML文件

所有现代浏览器都有读取和操作 XML 的内建 XML 解析器。解析器把 XML 载入内存,然后把它转换为可通过 JavaScript 访问的 XML DOM 对象

?

解析器读入整个文档,然后构建一个驻留内存的树结构,使用 DOM 接口来操作这个树结构。

优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;

缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

?

生成Xml文档
解析器通过在内存中建立和XML结构相对应的树状结构数据,使得应用程序可以方便地获得XML文件中的数据。

调用newDocument()可得到一个Document节点

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document= builder.newDocument();

?构建Document内容

Element root = this.document.createElement("employees");this.document.appendChild(root);Element employe = this.document.createElement("employe");Element name = this.document.createElement("name");name.appendChild(this.document.createTextNode("yues"));Element age = this.document.createElement("age");age.appendChild(this.document.createTextNode("26"));Element sex = this.document.createElement("sex");sex.appendChild(this.document.createTextNode("Man"));employe.appendChild(name);employe.appendChild(age);employe.appendChild(sex);root.appendChild(employe);

?使用 Transformer对象将一个Document节点变换为一个XML文件

TransformerFactory transFactory=TransformerFactory. newInstance()Transformer transformer=transFactory. newTransformer();

将被变换的Document对象封装到一个DOMSource对象中

DOMSource domSource=new DOMSource(document);

将变换得到XML文件对象封装到一个StreamResult对象中

File file=new File("newXML.xml");FileOutputStream out=new FileOutputStream(file);StreamResult xmlResult=new StreamResult(out);

对象transformer 调用transform方法实施变换

transformer.transform(domSource, xmlResult);

用于修改Document的常用方法
Node接口是Document的父接口,提供了许多用来修改、增加和删除节点的方法:
Node appendChild(Node newChild) 节点调用该方法可以向当前节点增加一个新的子节点,并返回这个新节点。
Node removeChild(Node oldChild) throws DOMException 节点调用该方法删除参数指定的子节点,并返回被删除的子节点。
Node replaceChild(Node newChild, Node oldChild) 将子节点列表中的子节点 oldChild 替换为 newChild,并返回 oldChild 节点。

解析Xml文档?

?

public void paserXml(String fileName) {// TODO Auto-generated method stubtry {this.document = builder.parse(new FileInputStream(new File(fileName)));NodeList employees = document.getChildNodes();for(int i=0;i<employees.getLength();i++){Node employe = employees.item(i);System.out.println("第"+(i+1)+"个Employee");NodeList employeAttrs = employe.getChildNodes();for(int j=0;j<employeAttrs.getLength();j++){Node employeAttr = employeAttrs.item(j);NodeList attrInfo = employeAttr.getChildNodes();for(int k=0;k<attrInfo.getLength();k++){Node info = attrInfo.item(k);if(info.getNodeType()==Node.ELEMENT_NODE){System.out.println(info.getNodeName()+":"+info.getTextContent());}}}}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

热点排行