==========对xml文档的DOM操作==========
1.获取工厂
DocumentBuilderFactory:定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。newInstance()静态方法:获取 DocumentBuilderFactory 的新实例。DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2.利用工厂产生实例
newDocumentBuilder()静态方法:使用当前配置的参数创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();
3.解析xml文档,得到代表文档的document
Document parse(File f)方法:将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOMDocument 对象。
Document document = builder.parse(new File("***.xml"));
==========读取xml文档中的内容==========
1.获取集合
getElementsByTagName(String tagname)方法:按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的NodeList(返回类型)。
NodeList list = document.getElementsByTagName("要查询的属性名");
2.返回需要的项
Node item(int index) 方法:返回集合中的第 index 个项。
Node node = list.item(index);
3.返回节点值
String getTextContent()方法: 此属性返回此节点及其后代的文本内容。
String value = node.getTextContent();
==========更新==========
准备工作同上到读取的二步。获得node
void setTextContent(String textContent)方法:来修改内存中节点内容
--------把内存中的document写到xml文件中去
1.获得转换器工厂实例
static TransformerFactory newInstance(String factoryClassName, ClassLoader classLoader)方法: 根据类名称获得一个新 TransformerFactory 实例。
TransformerFactory tf = TransformerFactory.newInstance();
2.得到转换器
可以通过 TransformerFactory.newTransformer()方法获取类Transformer的实例。
Transformer ts = tf.newTransformer();
3.执行转换
ts.transform(new DOMSource(document), new StreamResult(new File("***.xml")));
==========增加节点=========
1.得到代表文档的document
2.创建需要增加的节点
Node node = document.createElement("标签名"); node.setTextContent("标签内容");
3.得到需要增加节点的父节点
Node parent = document.getElementsByTagName("父节点名").item(index);
4.把需要增加的节点挂到父节点上[内存中]
//向尾部增加节点 parent.appendChild(node); //向指定位置增加节点使用此方法 parent.parent.insertBefore(newChild, refChild);
5.写到xml文件中同上
==========删除节点=========
核心部分:(利用父节点来删除子节点)Node node = document.getElementsByTagName("标签名").item(2); node.getParentNode().removeChild(node);
==========对xml文档属性的操作========
操作xml文档的元素是,一般都把元素当作node对象,但是如果发现node不好使时,就应该把node强转为合适的类型
例如:
Element book = (Element) document.getElementsByTagName("书").item(0); book.setAttribute("bookid", "yyyy");//修改,前提是bookid存在 book.setAttribute("password", "1234");//新建,前提是password不存在 book.removeAttribute("属性名");//删除,前提是该属性名存在 ====
==========改进==========
Element book=null; Node node = document.getElementsByTagName("书").item(0); //在使用节点做强转的时候,最好先判断节点类型,类型为Node的静态常量 if(node.getNodeType()==Node.ELEMENT_NODE){ book = (Element)node; book.setAttribute("name", "yyyy"); }
============遍历所有标签实例:===========
public static void list(Node node){
if(node.getNodeType()==Node.ELEMENT_NODE){
System.out.println(node.getNodeName());
}
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
list(child);
}
}