DOM,JAVA
来源:互联网 发布:三国志13 人物数据 编辑:程序博客网 时间:2024/06/05 07:31
1.DOM的介绍
2.DOM文档树模型
3.DOM六个基本接口
4.DOM访问节点
5.DOM创建XML文档
6.DOM修改XML节点
1.DOM介绍:
DOM 是Document Object Model 的缩写,即文档对象模型,是W3C组织推荐的处理XML的标准接口,定义了所有文档元素的对象和属性,以及访问它们的办法(接口)。
W3C DOM 分为三个不同的部分
核心DOM 用于任何结构文档的标准模型
XML DOM 用于XML文档的标准模型
HTML DOM 用于HTML文档的标准模型
2.DOM 文档树模型
解析器会把XML文档加载到内存中,在内存中为XML文件建立逻辑形式的树,其中每个节点代表一个个可以与其交互的对象。
XML文档中的每个元素都是一个节点
DOM是这样规定的:
1每个文档是一个文档节点
2每个XML标记是一个元素节点
3包含在XML元素中的文本是文本节点
4每一个XML属性是一个属性节点
5注释属于注释节点
3.DOM基本接口
在DOM接口规范中,有4个基本接口:
1.Document:是对文档进行操作的入口,本节点是DOM树中的根节点。
2.Node:代表DOM树中的一个节点 。
3.NodeList:表示有顺序关系的一组节点。
4.NamedNodeMap:通过名字来访问节点的集合。
1) Document接口
Document节点是DOM树的根节点,也即对XML 文档进行操作时的入口节点。
通过Document节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等。
2) Node接口
DOM接口中许多接口是从Node接口继承过来的,如 Element ,Attr 和 CDATASection等接口
3) NodeList接口
NodeList用于表示有顺序关系的一组节点。
DOM中的NodeList对象是活动的,即对文档的改变会直接反映到相关的NodeList对象中。
如:通过DOM获得一个NodeList对象,再通过DOM对Element节点进行增删改,这些变化就会自动反映到NodeList对象中
NodeList对象可以通过GetNodeByName获得
4) NamedNodeMap 接口
NameNodeMap表示的是一组和其唯一的名字的一一对应关系,该接口主要用在属性节点的表示上。
NameNodeMap对象也是活动的。
5) Element 接口
Element继承自Node接口
Element节点可以有Element子节点和Text子节点,若一个节点使用getNodeType()方法测试,返回值为Node。ELEMENT_NODE
6) Text 接口
通过getNodeType()返回,Node。TEXT_NODE
Element节点可以有Text节点和Element节点
4.DOM访问节点
xx.xml
<?xml version="1.0" encoding="utf-8" ?><books number="4" tmp="tmptmptmp"><book id="id01" publisher="aa" ><name>第一本书</name><price>111</price></book><book id="id02" publisher="bb" ><name>第二本书</name><price>222</price></book><book id="id03" publisher="cc" ><name>第三本书</name><price>333</price></book><book></book></books>
package XML;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.*;public class FORXML {//访问Attrpublic static void printAttr(NamedNodeMap map){if(map==null) return;System.out.println("----------------------------------------------------");for(int i=0;i<map.getLength();++i){Attr attrNodeAttr=(Attr)map.item(i);System.out.println("属性名为 :"+attrNodeAttr.getName()+"属性值为 :"+attrNodeAttr.getValue());}}
//访问Element节点
public static void printElement(Node root){NodeList children = root.getChildNodes();if(children.getLength()==1){//Text节点也算是子节点if(root.getNodeType()==Node.ELEMENT_NODE){Element curElement=(Element)root;System.out.println("节点--"+curElement.getNodeName() + "节点值--"+curElement.getTextContent());}return;}if(root.hasAttributes()){NamedNodeMap curNodeAttr = root.getAttributes();printAttr(curNodeAttr);}for(int i=0;i<children.getLength();++i){Node curNode=children.item(i);printElement(curNode);}}public static void main(String[] args) {try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(new File("xx.xml"));Element root = document.getDocumentElement();//获得XML的版本号System.out.println("XML的版本号为 :"+document.getXmlVersion());//获得XML的根节点System.out.println("XML的根节点叫做:"+root.getNodeName());//输出ElementprintElement(root);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
5.DOM创建XML
结果如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><books><book id="id-01"><name>第一本</name><price>11</price></book><book id="id-11"><name>第二本</name><price>22</price></book><book id="id-21"><name>第三本</name><price>33</price></book></books>
package createXML;import java.io.File;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class example {public static void main(String[] args) {String[] booksName= {"第一本","第二本","第三本"};String[] booksPrice= {"11","22","33"};try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder;builder = factory.newDocumentBuilder();//创建空的XML文档Document document = builder.newDocument();document.setXmlVersion("1.0");//创建并添加Element节点Element root = document.createElement("books");document.appendChild(root);for(int i=0;i<booksName.length;++i){root.appendChild(document.createElement("book"));}NodeList nodeList = document.getElementsByTagName("book");int size= nodeList.getLength();for(int i=0;i<size;i++){Node node = nodeList.item(i);if(node.getNodeType()==Node.ELEMENT_NODE){Element element = (Element) node;//添加Attrelement.setAttribute("id", "id-"+i+1);//为book节点添加子节点element.appendChild(document.createElement("name"));element.appendChild(document.createElement("price"));}}//为name节点添加Text子节点NodeList nodeList2 = document.getElementsByTagName("name");for(int i=0;i<size;i++){Node node = nodeList2.item(i);if(node.getNodeType()==Node.ELEMENT_NODE){Element element = (Element) node;element.appendChild(document.createTextNode(booksName[i]));}}NodeList nodeList3 = document.getElementsByTagName("price");for(int i=0;i<size;i++){Node node = nodeList3.item(i);if(node.getNodeType()==Node.ELEMENT_NODE){Element element = (Element) node;element.appendChild(document.createTextNode(booksPrice[i]));}}//将存在内存中的xml树转化成为xml文件输出TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();//添加这一行保证换行transformer.setOutputProperty(OutputKeys.INDENT, "yes");DOMSource domSource = new DOMSource(document);File file=new File("example.xml");FileOutputStream out=new FileOutputStream(file);StreamResult xmlResult = new StreamResult(out);transformer.transform(domSource, xmlResult);} catch (Exception e) {e.printStackTrace();}}}
6.DOM修改与删除节点
结果如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><books><book><price>111111111111</price></book><book id="id-11"><name>第二本</name><price>22</price></book><book id="id-21"><name>第三本</name><price>33</price></book></books>
package createXML;import java.io.File;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class example {public static void main(String[] args) {String[] booksName= {"第一本","第二本","第三本"};String[] booksPrice= {"11","22","33"};try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder;builder = factory.newDocumentBuilder();Document document = builder.parse(new File("example.xml"));Element root=document.getDocumentElement();NodeList nodeList = document.getElementsByTagName("book");NodeList nameNodeList = document.getElementsByTagName("name");NodeList priceNodeList = document.getElementsByTagName("price");Element firstBookElement = (Element) nodeList.item(0);//删除第一本书的属性firstBookElement.removeAttribute("id");//删除第一本书下的第一个子节点firstBookElement.removeChild(nameNodeList.item(0));//修改Text节点priceNodeList.item(0).setTextContent("111111111111");TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.setOutputProperty(OutputKeys.INDENT, "yes");DOMSource domSource = new DOMSource(document);File file=new File("example_update.xml");FileOutputStream out=new FileOutputStream(file);StreamResult xmlResult = new StreamResult(out);transformer.transform(domSource, xmlResult);} catch (Exception e) {e.printStackTrace();}}}
- DOM,JAVA
- java dom
- JAVA解析XML DOM
- JAVA解析XML DOM
- JAVA解析XML DOM
- Java Dom解析XML
- Java DOM读写XML
- java DOM 注意事项
- JAVA解析XML DOM
- Java-DOM解析
- Java Dom解析xml
- Java Dom解析xml
- java dom解析xml
- JAVA dom解析xml
- Java DOM解析XML
- JAVA DOM XML解析
- Java Dom XML
- Java解析XML---DOM
- Ajax状态码
- 服务器环境配置思路
- HDU 2181 哈密顿绕行世界问题
- 二叉排序树链表实现
- 【Linux】使用Ubuntu过程中遇到的问题
- DOM,JAVA
- CentOS tomcat
- InvalidateRect函数
- 浅谈PADS中的ECO
- Oracle外连接
- Android Studio修改项目的包名
- Unity3D占用内存太大的解决方法
- CentOS 7 手工添加软件EPEL仓库配置文件
- NSDate 时间比较