dom解析:
public class Demo1 {
/*
public static void main(String[] args) throws Exception{
//创建工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//得到dom解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//对XML文档进行解析,得到代表文档的document
Document document=builder.parse("XML/Demo2.xml");
}*/
获取某个节点的属性
创建工厂->得到dom解析器->
对XML文档进行解析,得到代表文档的document
//得到第2个书节点,item(index)的index是从0开始的
Node node=list.item(
1);
String name=
node.getTextContent();
System.out.println(name);
//得到XML文档中的标签
创建工厂->得到dom解析器->
对XML文档进行解析,得到代表文档的document
Node list=document.getElementsByTagName(
"书架").item(
0);
list(list);
}
private void list(Node list) {
if(list instanceof Element)
System.out.println(list.getNodeName());
NodeList l=
list.getChildNodes();
for(
int i=
0;i<l.getLength();i++
){
Node child=
l.item(i);
list(child);
}
}
得到XML文档中标签的某个属性值:<书名 name="XXX">什么都不知道</书名>
创建工厂->得到dom解析器->
对XML文档进行解析,得到代表文档的document
//知道是Element了才能强转
Element bookname=(Element)document.getElementsByTagName(
"书名").item(
0);
System.out.println(bookname.getAttribute(
"name"));
添加节点:
@Test
public void add() throws Exception{
创建工厂->得到dom解析器->
对XML文档进行解析,得到代表文档的document
//创建节点
Element element=document.createElement(
"价钱");
element.setTextContent("45.3元");
//把创建的节点挂在第一本书上
Element book=(Element)document.getElementsByTagName(
"书").item(
0);
book.appendChild(element);
//这只是在内存中更新,现在将更新后的XMl回写到文档中
//得到转换器的工厂
TransformerFactory tf=
TransformerFactory.newInstance();
//得到转换器
Transformer t=
tf.newTransformer();
//调用Transformer的。。。方法将docuemnt转到文件中去
t.transform(
new DOMSource(document),
new StreamResult(
new FileOutputStream(
"src/Demo2.xml")));
}
@Test
//节点增填到制定的位置
public void add2() throws Exception{
创建工厂->得到dom解析器->
对XML文档进行解析,得到代表文档的document
//创节点
Element element=document.createElement(
"价钱");
element.setTextContent("45.3元");
//得到参考节点
Element e=(Element)document.getElementsByTagName(
"价钱").item(
0);
//把创建的节点挂在第一本书上
Element book=(Element)document.getElementsByTagName(
"书").item(
0);
book.insertBefore(element,e);//前边的参数是创建后要添加的节点,后边的参数是添加到这个节点的之前的Element
//这只是在内存中更新,现在将更新后的XMl回写到文档中
/得到转换器的工厂-》
//得到转换器——》//调用Transformer的。。。方法将docuemnt转到文件中去
}
添加属性:element.setAttribute("name","value"); publicvoid addAtt() throws Exception{ Element e=(Element)document.getElementsByTagName(
"书名").item(
0); e.setAttribute(
"id",
"xxx"); }
刪除属性:element.removeAttribute("name");
删除节点:fatherNode.removeChild(childNode); way1: /得到要删除的节点 NodeList list=document.getElementsByTagName(
"价钱"); Node node=list.item(
0);
//得到要删除节点的爸爸 Node father=document.getElementsByTagName(
"书").item(
0);
//删除 father.removeChild(node);
//把更新内存回写到文档中(代码省略) way2:
//得到要删除的节点 NodeList list=document.getElementsByTagName(
"价钱"); Node node=list.item(
0);
//删除 node.getParentNode().removeChild(node);
注意:当内存中的xml内容更新(更改)后,一定记得回写到xml中。