创建xml文件:
//获取DocumentBuilderFactory工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
// 设置去掉空格的方法
factory.setIgnoringElementContentWhitespace(true);
// 获取解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//创建document接口
Document doc = builder.newDocument();
//设置版本
doc.setXmlVersion("1.0");
//创建注释
Comment comment = doc.createComment("创建xml文件");
//把注释添加到document接口
doc.appendChild(comment);
//建立XML 元素的根结点,参数为学生
Element root = doc.createElement("学生");
//建立XML 元素的子结点,参数为姓名
Element name = doc.createElement("姓名");
//建立文字结点,并把它追加到子结点name中
name.appendChild(doc.createTextNode("redarmy_chen"));
//建立XML 元素的子结点,参数为性别
Element sex = doc.createElement("性别");
//设置sex子结点的文字结点
sex.setAttribute("name", "男");
//把子结点追加到根结点上
root.appendChild(name);
root.appendChild(sex);
//把根结点追加到xml中
doc.appendChild(root);
//建立TransformerFactory对象
TransformerFactory factory1 = TransformerFactory.newInstance();
//以XSLT Script文件作为输入建立Transformer对象
Transformer tformer = factory1.newTransformer();
//转换xml文档
tformer.transform(new DOMSource(doc), new StreamResult("src//ds.xml"));
}
生成的xml文档:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--创建xml文件-->
<学生>
<姓名>redarmy_chen</姓名>
<性别 name="男"/>
</学生>
在src下建dom.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 中国[
<!ELEMENT 中国 (北京,河南*,河北)>
<!ELEMENT 北京 (海淀)>
<!ELEMENT 海淀 (上地,中关村,东北旺)>
<!ELEMENT 上地 (#PCDATA)>
<!ELEMENT 中关村 (#PCDATA)>
<!ELEMENT 东北旺 (#PCDATA)>
<!ELEMENT 河南 (郑州,安阳)>
<!ELEMENT 郑州 (商丘)>
<!ELEMENT 商丘 (#PCDATA)>
<!ELEMENT 安阳 EMPTY>
<!ELEMENT 河北 (石家庄)>
<!ELEMENT 石家庄 EMPTY>
<!ATTLIST 商丘 人口 CDATA #IMPLIED>
<!ATTLIST 安阳 人口 CDATA #IMPLIED>
<!ATTLIST 石家庄 人口 CDATA #IMPLIED>
]>
<中国>
<北京>
<海淀>
<上地>上地七街</上地>
<中关村>鼎好</中关村>
<东北旺>软件园</东北旺>
</海淀>
</北京>
<河南>
<郑州>
<商丘人口="100万">商丘中学</商丘>
</郑州>
<安阳 />
</河南>
<河北>
<石家庄人口="2000万"/>
</河北>
</中国>
// 遍历所有的xml文档中的内容
@Test
public void test1() throws Exception {
//获取DocumentBuilderFactory工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 设置去掉空格的方法
factory.setIgnoringElementContentWhitespace(true);
// 获取解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析xml文档
Document document = builder.parse(new File("src//dom.xml"));
//获取根结点对象
Element root = document.getDocumentElement();
//获取根结点元素名称
String tagname = root.getTagName();
System.out.println("根结点的名称是:"+root.getTagName());
//调用Node中的getChildNodes()获取根结点的子结点
NodeList Nlist = root.getChildNodes();
//遍历该子结点
display(Nlist);
}
//使用递归遍历个子结点中的子结点
public void display(NodeList Nlist){
for (int i = 0; i <Nlist.getLength(); i++) {
Node node = Nlist.item(i);
System.out.println(node.getNodeName());
if(node.hasChildNodes()){//判断该结点是否还有子结点
NodeList list = node.getChildNodes();
display(list); //调用方法本身
}else{
if(node.getNodeType()==Node.TEXT_NODE){
System.out.println("---------"+node.getTextContent());
}
break;
}
}
}运行结果如下:
/**解析商丘的人口这个这个属性*/
public void test1()throws Exception{
//获取DocumentBuilderFactory工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析xml文档
Document document = builder.parse(new File("src//dom.xml"));
// 获得商丘的属性里表
NodeList list = document.getElementsByTagName("商丘");
Node node = list.item(0);
if(node.getNodeType()== Node.ELEMENT_NODE){
Element element = (Element)node;
String value = element.getAttribute("人口");
System.out.println("属性的值是:"+value);
}
}下面的代码实现的与上边的效果一样
public void test2()throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("src//dom.xml"));
Element element = document.getElementById("attr");
String value = element.getAttribute("id");
String value1 = element.getAttribute("人口");
System.out.println("属性的值是:"+value+" "+value1);
}
运行结果如下:属性的值是:100万
增加一个子结点
public void test()throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("src//dom.xml"));
//增加一个子结点,并添加结点内容“地方”
Element element = doc.createElement("东北旺");
element.appendChild(doc.createTextNode("地方"));
Node node = doc.getElementsByTagName("海淀").item(0);
node.appendChild(element);
TransformerFactory factory1 = TransformerFactory.newInstance();
Transformer tformer = factory1.newTransformer();
tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));
}运行结果如下:
<北京>
<海淀>
<上地>上地七街</上地>
<中关村>鼎好</中关村>
<东北旺>软件园</东北旺>
<东北旺>家</东北旺>
</海淀>
</北京>
<河南>
<郑州>
<商丘 人口="100万">商丘中学</商丘>
</郑州>
<安阳/>
</河南>
<河北>
<石家庄 人口="2000万"/>
</河北>
</中国>
删除第二个东北旺的子结点
public void test1()throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("src//dom.xml"));
Node node = doc.getElementsByTagName("海淀").item(0);
//删除第二个东北旺的子结点
node.removeChild(doc.getElementsByTagName("东北旺").item(1));
TransformerFactory factory1 = TransformerFactory.newInstance();
Transformer tformer = factory1.newTransformer();
tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));
}运行结果如下:
<北京>
<海淀>
<上地>上地七街</上地>
<中关村>鼎好</中关村>
<东北旺>软件园</东北旺>
</海淀>
</北京>
<河南>
<郑州>
<商丘 人口="100万">商丘中学</商丘>
</郑州>
<安阳/>
</河南>
<河北>
<石家庄 人口="2000万"/>
</河北>
</中国>
改变东北旺的内容结点
public void test2()throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("src//dom.xml"));
//改变东北旺的内容结点
Node node1 = doc.getElementsByTagName("东北旺").item(0);
node1.setTextContent("杀人");
TransformerFactory factory1 = TransformerFactory.newInstance();
Transformer tformer = factory1.newTransformer();
tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));
}运行结果如下:
<北京>
<海淀>
<上地>上地七街</上地>
<中关村>鼎好</中关村>
<东北旺>杀人</东北旺>
<东北旺>家</东北旺></海淀>
</北京>
<河南>
<郑州>
<商丘 人口="100万">商丘中学</商丘>
</郑州>
<安阳/>
</河南>
<河北>
<石家庄 人口="2000万"/>
</河北>
</中国>
新增子元素在子元素的开始或最后
public void test4()throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("src//dom.xml"));
//新增子元素东北旺
Element newnode=(Element)doc.createElement("东北旺");
newnode.appendChild(doc.createTextNode("家"));
Node node = doc.getElementsByTagName("海淀").item(0);
node.appendChild(newnode);
node.insertBefore(newnode, node.getFirstChild());
//node.insertBefore(newnode, node.getFirstChild());
TransformerFactory factory1 = TransformerFactory.newInstance();
Transformer tformer = factory1.newTransformer();
tformer.transform(new DOMSource(doc), new StreamResult("src//dom.xml"));
}运行结果如下:
<北京>
<海淀>
<东北旺>家</东北旺>
<上地>上地七街</上地>
<中关村>鼎好</中关村>
<东北旺>软件园</东北旺>
<东北旺>家</东北旺>
</海淀>
</北京>
北京
海淀
上地
#text
---------上地七街
中关村
#text
---------鼎好
东北旺
#text
---------软件园
河南
郑州
商丘
#text
---------商丘中学
安阳
河北
石家庄