xml关于节点例子
1.(基本操作)
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomTest {
public static void main(String[] args) throws
Exception{
DocumentBuilderFactory
factory=DocumentBuilderFactory.newInstance();//创建一个新的工
厂实例factory
DocumentBuilder
builder=factory.newDocumentBuilder(); //得到一个dom解析器
Document doc=builder.parse(new File
("src/shuiguo.xml")); //得到dom对象
childNodesLength(doc);
Node shuiguo=doc.getElementsByTagName("水
果").item(0);
listNodes(shuiguo);
}
public static void listNodes(Node shuiguo) {
NodeList nodelist=shuiguo.getChildNodes();
for(int i=0;i<nodelist.getLength();i++){
System.out.println("节点的名
称"+nodelist.item(i).getNodeName()+" 节点的类
型:"+nodelist.item(i).getNodeType()+" 节点的
值:"+nodelist.item(i).getNodeValue());
}
}
public static void childNodesLength(Document doc) {
Node shuiguo=doc.getElementsByTagName("水
果").item(0);
NodeList nodelist=shuiguo.getChildNodes();
int count=0;
for(int i=0;i<nodelist.getLength();i++){
if(nodelist.item(i).getNodeType()
==Node.ELEMENT_NODE)
count++;
}
System.out.println("水果中含有的元素节点的个
数是:"+count);
}
}
2.(遍历)
import java.io.File;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomTest1 {
public static void main(String[] args) throws
Exception {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();// 创建解析器工厂
DocumentBuilder builder =
factory.newDocumentBuilder();// 创建解析器
Document doc = builder.parse(new File
("src/shuiguo.xml")); // 得到文档对象
Node node = doc.getElementsByTagName("水
果").item(0); // 得到文档的水果当中的第一个元素
listNode(node);
}
public static void listNode(Node node) {
System.out.println("节点名称:" +
node.getNodeName() + " 节点值:"
+ node.getNodeValue());
//打印元素节点以及文本节点(根节点)的名称
及内容
if (node.getNodeType() == Node.ELEMENT_NODE)
{
NamedNodeMap map =
node.getAttributes();
if (map != null) {
for (int i = 0; i <
map.getLength(); i++) {
System.out.println("
属性节点名称:" + map.item(i).getNodeName()
+ "
属性节点的值:" + map.item(i).getNodeValue());
}
}
}
//打
印属性节点(根节点)的名称及内容
NodeList nodelist=node.getChildNodes();
if(nodelist.getLength()>0){
for(int i=0;i<nodelist.getLength();i
++){
listNode(nodelist.item(i));
//递归
}
}
//打印所有子节点的名称以及内容
}
}
3.
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DomTest2 {
public static void main(String[] args) throws
Exception {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();// 创建解析器工厂
DocumentBuilder builder =
factory.newDocumentBuilder();// 创建解析器
Document doc = builder.parse(new File
("src/shuiguo.xml")); // 得到文档对象
// find(doc); //查找
// findAtt(doc); //查找属性
// createElement(doc); //作业:向节点当中添加
属性
// removeElement(doc); //作业:删除属性节点
// updateElement(doc);
updateAttribute(doc); // 修改属性
}
public static void updateAttribute(Document doc)
throws Exception {
Node apple=doc.getElementsByTagName("苹
果").item(0);
if(apple.getNodeType()==Node.ELEMENT_NODE){
Element element=(Element)apple;
// element.getAttributeNode
("id").setNodeValue("111111");
// element.getAttributeNode
("id").setTextContent("22222222222");
element.getAttributeNode
("id").setValue("333333");
}
TransformerFactory
factory=TransformerFactory.newInstance(); //创建类型转换
工厂
Transformer former=factory.newTransformer();
//创建转换器
former.transform(new DOMSource(doc), new
StreamResult(new File("src/shuiguo.xml"))); //将内存中的内
容写到文件中
}
public static void updateElement(Document doc) throws
Exception {
Node grape=doc.getElementsByTagName("葡
萄").item(0);
grape.setTextContent("grapegrapegrape");
TransformerFactory
factory=TransformerFactory.newInstance(); //创建类型转换
工厂
Transformer former=factory.newTransformer();
//创建转换器
former.transform(new DOMSource(doc), new
StreamResult(new File("src/shuiguo.xml"))); //将内存中的内
容写到文件中
}
public static void removeElement(Document doc) throws
Exception {
Node grape=doc.getElementsByTagName("葡
萄").item(0);
grape.getParentNode().removeChild(grape);
TransformerFactory
factory=TransformerFactory.newInstance(); //创建类型转换
工厂
Transformer former=factory.newTransformer();
//创建转换器
former.transform(new DOMSource(doc), new
StreamResult(new File("src/shuiguo.xml"))); //将内存中的内
容写到文件中
}
public static void createElement(Document doc) throws
Exception {
NodeList shuiguos=doc.getElementsByTagName("
水果");
Node shuiguo=shuiguos.item(1);
Node grape=doc.createElement("葡萄"); //
创建葡萄标签
Node grapevalue=doc.createTextNode("grape");
//创建葡萄标签中的内容
grape.appendChild(grapevalue); //将内容
添加到标签
// shuiguo.appendChild(grape); //将葡萄标
签添加到水果标签中
shuiguo.insertBefore(grape,
doc.getElementsByTagName("梨").item(1));
TransformerFactory
factory=TransformerFactory.newInstance(); //创建类型转换
工厂
Transformer former=factory.newTransformer();
//创建转换器
former.transform(new DOMSource(doc), new
StreamResult(new File("src/shuiguo.xml"))); //将内存中的内
容写到文件中
}
public static void findAtt(Document doc) {
NodeList nodelist=doc.getElementsByTagName("
水果"); //获取水果元素
Node node=nodelist.item(0); //获取水果元
素中第一个
if(node.getNodeType()==Node.ELEMENT_NODE){
Element element=(Element)node; //造
型
String name=element.getAttribute
("id");
System.out.println(name);
}
}
public static void find(Document doc) {
NodeList nodelist=doc.getElementsByTagName("
水果"); //获取水果元素
Node node=nodelist.item(0); //获取水果元
素中第一个
String value=node.getTextContent(); //获取
节点的文本值
String value1=node.getNodeValue();
String value2=node.getChildNodes().item
(0).getNodeValue();
System.out.println(value2);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<食物>
<!--Dom中处处都是节点 元素节点 文本节点 属性节点 注释节点 -->
<水果 id="2">
<苹果 id="333333">不是中文</苹果>
<香蕉>中文</香蕉>
<梨>pear</梨>
</水果>
<水果 id="2">
<苹果 id="1">不是中文</苹果>
<梨>pear</梨>
<葡萄>grapegrapegrape</葡萄>
</水果>
<水果 id="2">
<苹果 id="1">不是中文</苹果>
<香蕉>中文</香蕉>
</水果>
</食物>