使用JAXP进行DOM解析( DocumentBuilderFactory、DocumentBuilder、Document)
2013-10-21 18:54
537 查看
1.javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回
2.调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。
3.调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
4.调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。
案例1.遍历xml文件中跟节点下面的所有子节点.
1.xml的约束文件java.dtd
[html]
view plaincopyprint?
<!ELEMENT classes (java班,net班,php班,ios班)> <!ELEMENT java班 (teachers?,students?)> <!ELEMENT net班 (teachers?,students?)> <!ELEMENT php班 (teachers?,students?)> <!ELEMENT ios班 (teachers?,students?)> <!ELEMENT teachers (teacher*)> <!ELEMENT teacher EMPTY> <!ELEMENT students (student*)> <!ELEMENT student (name,sex,age)> <!ATTLIST java班 name CDATA #IMPLIED> <!ATTLIST net班 name CDATA #IMPLIED> <!ATTLIST php班 name CDATA #IMPLIED> <!ATTLIST ios班 name CDATA #IMPLIED> <!ATTLIST teacher name CDATA #IMPLIED> <!ATTLIST teacher sex CDATA #IMPLIED> <!ATTLIST teacher age CDATA #IMPLIED> <!ELEMENT name (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ATTLIST student id ID #IMPLIED>
2.xml文件内容如下java.xml
[html]
view plaincopyprint?
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE classes SYSTEM "bin//parsers//java.dtd"> <classes> <java班 name="CSDNJava01班"> <teachers> <teacher name="军哥" sex="男" age="28" /> <teacher name="刘丽华" sex="女" age="28" /> </teachers> <students> <student id="x121"> <name>王亮</name> <sex>女</sex> <age>28</age> </student> </students> </java班> <!-- 注释0 --> <net班 name="CSDNNet01班">xxx</net班> <php班 name="CSDNPhp01班"></php班> <ios班 name="CSDNIos01班"></ios班> </classes> <!-- 对java.xml文件进行CRUD的操作 --> <!-- 节点 nodeName nodeValue nodeType element 标签名 null 1 Attr 属性名 属性值 2 text #text 文本的值 3 -->
3.遍历xml文件的操作
//1.获取XML的根节点对象
[java]
view plaincopyprint?
@Test
public void test() throws ParserConfigurationException, SAXException, IOException{
//调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//通过文件的方式获取Document对象
/*File file = new File("src//parsers//java.xml");
System.out.println(file+"----");
Document document = builder.parse(file);*/
//解析指定的文件
InputStream is= this.getClass().getClassLoader()
.getResourceAsStream("parsers//java.xml");
Document document = builder.parse(is);
//document.getDocumentElement()获取根节点的元素对象
Element root = document.getDocumentElement();
//遍历根节点下面的所有子节点
listNodes(root);
}
//2.遍历节点对象的方法
[java]
view plaincopyprint?
/**
* 遍历根据节点对象下面的所有的节点对象
* @param node
*/
public void listNodes(Node node) {
// 节点是什么类型的节点
if (node.getNodeType() == Node.ELEMENT_NODE) {// 判断是否是元素节点
Element element = (Element) node;
//判断此元素节点是否有属性
if(element.hasAttributes()){
//获取属性节点的集合
NamedNodeMap namenm = element.getAttributes();//Node
//遍历属性节点的集合
for(int k=0;k<namenm.getLength();k++){
//获取具体的某个属性节点
Attr attr = (Attr) namenm.item(k);
System.out.println("name:::"+attr.getNodeName()+" value::"
+attr.getNodeValue()+" type::"+attr.getNodeType());
}
}
//获取元素节点的所有孩子节点
NodeList listnode = element.getChildNodes();
//遍历
for (int j = 0; j < listnode.getLength(); j++) {
//得到某个具体的节点对象
Node nd = listnode.item(j);
System.out.println("name::" + nd.getNodeName() + " value:::"
+ nd.getNodeValue() + " type:::" + nd.getNodeType());
//重新调用遍历节点的操作的方法
listNodes(nd);
}
}
}
4.查询某个节点对象(简单列举一些案例)
[java]
view plaincopyprint?
/**
* 根据标签的名称查找所有该名称的节点对象
*/
public void findNode(Document document) {
//根据标签名称获取该名称的所有节点对象
NodeList nodelist = document.getElementsByTagName("teacher");
//遍历
for (int i = 0; i < nodelist.getLength(); i++) {
//得到具体的某个节点对象
Node node = nodelist.item(i);
System.out.println(node.getNodeName());
}
}
/**
* 根据属性的值 查询某个节点对象
* 属性值是唯一(假设)
* @param document
* @param value
* @return
*/
public Node findNodeByAttrValue(Document document, String value) {
//根据标签名称获取该名称的节点对象集合
NodeList nodelist = document.getElementsByTagName("teacher");
//遍历
for (int i = 0; i < nodelist.getLength(); i++) {
//获取某个具体的元素节点对象
Element node = (Element) nodelist.item(i);
//根据属性名称获取该节点的属性节点对象
Attr attr = node.getAttributeNode("name");
//获取属性节点的值是否给指定的节点属性值相同
if (attr.getNodeValue().equals(value)) {
//返回此节点
return node;
}
}
return null;
}
/**
* 根据id获取某个节点对象
*
* @param document
* @param id
* @return
*/
public Node findNodeById(Document document, String id) {
return document.getElementById(id);
}
5.删除指定的节点对象
[java]
view plaincopyprint?
/**
* 删除某个节点对象
*
* @param document
* @param id
* @throws TransformerException
*/
public void deleteNodeById(Document document, String id)
throws TransformerException {
//获取删除的节点对象
Node node = document.getElementById(id);
// 是通过父节点调用removeChild(node)把子节点给删除掉
Node node1 = node.getParentNode().removeChild(node);
//创建TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
//Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
//Transformer对象通过TransformerFactory获得
Transformer transformer = transformerFactory.newTransformer();
// 把Document对象又重新写入到一个XML文件中。
transformer.transform(new DOMSource(document), new StreamResult(
new File("src//a.xml")));
}
6.更新某个节点对象
[java]
view plaincopyprint?
/**
* 更新某个节点
*
* @param document
* @param id
* @throws TransformerException
*/
public void updateNodeById(Document document, String id)
throws TransformerException {
//根据id获取元素指定的元素节点对象
Element node = document.getElementById(id);
//获取元素节点的id属性节点对象
Attr attr = node.getAttributeNode("id");
//修改元素节点的属性值
attr.setValue("x122");
//获取该节点对象的所有孩子节点对象name、age、sex节点
NodeList nodelist = node.getChildNodes();
//遍历
for (int i = 0; i < nodelist.getLength(); i++) {
//得到具体的节点对象
Node n = nodelist.item(i);
//判断是否是元素节点对象
if (n.getNodeType() == Node.ELEMENT_NODE) {
//看是否是name节点
if (n.getNodeName().equals("name")) {
n.setTextContent("君君");//修改其值
} else if (n.getNodeName().equals("age")) {//看看是否是age节点
n.setTextContent("80");//修改其值
} else if (n.getNodeName().equals("sex")) {//看看是否是sex节点
n.setTextContent("男");//修改其值
} else {
System.out.println("不做处理");
}
}
}
//创建TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
//Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
//Transformer对象通过TransformerFactory获得
Transformer transformer = transformerFactory.newTransformer();
//把Document对象又重新写入到一个XML文件中。
transformer.transform(new DOMSource(document), new StreamResult(
new File("src//b.xml")));
}
7.在某个节点的下方添加新的节点
[java]
view plaincopyprint?
/**
* 在指定的节点下方添加新得某个节点
*
* @param document
* @param id
* @throws TransformerException
*/
public void addNodeById(Document document, String id)
throws TransformerException {
//获取要添加位置节点的兄弟节点对象
Element node = document.getElementById(id);
//获取其父节点对象
Node parentNode = node.getParentNode();
//创建元素节点
Element nd = document.createElement("student");
//设置元素节点的属性值
nd.setAttribute("id", "x123");
//创建name元素节点
Node name = document.createElement("name");
//设置name节点的文本值
name.appendChild(document.createTextNode("陈红军"));
//创建age元素节点
Node age = document.createElement("age");
//设置age节点的文本值
age.appendChild(document.createTextNode("20"));
//创建sex元素节点
Node sex = document.createElement("sex");
//设置sex节点的文本值
sex.appendChild(document.createTextNode("男"));
//在nd节点中添加3个子节点
nd.appendChild(name);
nd.appendChild(age);
nd.appendChild(sex);
//在父节点中添加nd节点
parentNode.appendChild(nd);
//创建TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
//Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
//Transformer对象通过TransformerFactory获得
Transformer transformer = transformerFactory.newTransformer();
//把Document对象又重新写入到一个XML文件中。
transformer.transform(new DOMSource(document), new StreamResult(
new File("src//c.xml")));
}
2.调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。
3.调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
4.调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。
案例1.遍历xml文件中跟节点下面的所有子节点.
1.xml的约束文件java.dtd
[html]
view plaincopyprint?
<!ELEMENT classes (java班,net班,php班,ios班)> <!ELEMENT java班 (teachers?,students?)> <!ELEMENT net班 (teachers?,students?)> <!ELEMENT php班 (teachers?,students?)> <!ELEMENT ios班 (teachers?,students?)> <!ELEMENT teachers (teacher*)> <!ELEMENT teacher EMPTY> <!ELEMENT students (student*)> <!ELEMENT student (name,sex,age)> <!ATTLIST java班 name CDATA #IMPLIED> <!ATTLIST net班 name CDATA #IMPLIED> <!ATTLIST php班 name CDATA #IMPLIED> <!ATTLIST ios班 name CDATA #IMPLIED> <!ATTLIST teacher name CDATA #IMPLIED> <!ATTLIST teacher sex CDATA #IMPLIED> <!ATTLIST teacher age CDATA #IMPLIED> <!ELEMENT name (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ATTLIST student id ID #IMPLIED>
<!ELEMENT classes (java班,net班,php班,ios班)> <!ELEMENT java班 (teachers?,students?)> <!ELEMENT net班 (teachers?,students?)> <!ELEMENT php班 (teachers?,students?)> <!ELEMENT ios班 (teachers?,students?)> <!ELEMENT teachers (teacher*)> <!ELEMENT teacher EMPTY> <!ELEMENT students (student*)> <!ELEMENT student (name,sex,age)> <!ATTLIST java班 name CDATA #IMPLIED> <!ATTLIST net班 name CDATA #IMPLIED> <!ATTLIST php班 name CDATA #IMPLIED> <!ATTLIST ios班 name CDATA #IMPLIED> <!ATTLIST teacher name CDATA #IMPLIED> <!ATTLIST teacher sex CDATA #IMPLIED> <!ATTLIST teacher age CDATA #IMPLIED> <!ELEMENT name (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ATTLIST student id ID #IMPLIED>
2.xml文件内容如下java.xml
[html]
view plaincopyprint?
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE classes SYSTEM "bin//parsers//java.dtd"> <classes> <java班 name="CSDNJava01班"> <teachers> <teacher name="军哥" sex="男" age="28" /> <teacher name="刘丽华" sex="女" age="28" /> </teachers> <students> <student id="x121"> <name>王亮</name> <sex>女</sex> <age>28</age> </student> </students> </java班> <!-- 注释0 --> <net班 name="CSDNNet01班">xxx</net班> <php班 name="CSDNPhp01班"></php班> <ios班 name="CSDNIos01班"></ios班> </classes> <!-- 对java.xml文件进行CRUD的操作 --> <!-- 节点 nodeName nodeValue nodeType element 标签名 null 1 Attr 属性名 属性值 2 text #text 文本的值 3 -->
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE classes SYSTEM "bin//parsers//java.dtd"> <classes> <java班 name="CSDNJava01班"> <teachers> <teacher name="军哥" sex="男" age="28" /> <teacher name="刘丽华" sex="女" age="28" /> </teachers> <students> <student id="x121"> <name>王亮</name> <sex>女</sex> <age>28</age> </student> </students> </java班> <!-- 注释0 --> <net班 name="CSDNNet01班">xxx</net班> <php班 name="CSDNPhp01班"></php班> <ios班 name="CSDNIos01班"></ios班> </classes> <!-- 对java.xml文件进行CRUD的操作 --> <!-- 节点 nodeName nodeValue nodeType element 标签名 null 1 Attr 属性名 属性值 2 text #text 文本的值 3 -->
3.遍历xml文件的操作
//1.获取XML的根节点对象
[java]
view plaincopyprint?
@Test
public void test() throws ParserConfigurationException, SAXException, IOException{
//调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//通过文件的方式获取Document对象
/*File file = new File("src//parsers//java.xml");
System.out.println(file+"----");
Document document = builder.parse(file);*/
//解析指定的文件
InputStream is= this.getClass().getClassLoader()
.getResourceAsStream("parsers//java.xml");
Document document = builder.parse(is);
//document.getDocumentElement()获取根节点的元素对象
Element root = document.getDocumentElement();
//遍历根节点下面的所有子节点
listNodes(root);
}
@Test public void test() throws ParserConfigurationException, SAXException, IOException{ //调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); //调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象 DocumentBuilder builder = builderFactory.newDocumentBuilder(); //通过文件的方式获取Document对象 /*File file = new File("src//parsers//java.xml"); System.out.println(file+"----"); Document document = builder.parse(file);*/ //解析指定的文件 InputStream is= this.getClass().getClassLoader() .getResourceAsStream("parsers//java.xml"); Document document = builder.parse(is); //document.getDocumentElement()获取根节点的元素对象 Element root = document.getDocumentElement(); //遍历根节点下面的所有子节点 listNodes(root); }
//2.遍历节点对象的方法
[java]
view plaincopyprint?
/**
* 遍历根据节点对象下面的所有的节点对象
* @param node
*/
public void listNodes(Node node) {
// 节点是什么类型的节点
if (node.getNodeType() == Node.ELEMENT_NODE) {// 判断是否是元素节点
Element element = (Element) node;
//判断此元素节点是否有属性
if(element.hasAttributes()){
//获取属性节点的集合
NamedNodeMap namenm = element.getAttributes();//Node
//遍历属性节点的集合
for(int k=0;k<namenm.getLength();k++){
//获取具体的某个属性节点
Attr attr = (Attr) namenm.item(k);
System.out.println("name:::"+attr.getNodeName()+" value::"
+attr.getNodeValue()+" type::"+attr.getNodeType());
}
}
//获取元素节点的所有孩子节点
NodeList listnode = element.getChildNodes();
//遍历
for (int j = 0; j < listnode.getLength(); j++) {
//得到某个具体的节点对象
Node nd = listnode.item(j);
System.out.println("name::" + nd.getNodeName() + " value:::"
+ nd.getNodeValue() + " type:::" + nd.getNodeType());
//重新调用遍历节点的操作的方法
listNodes(nd);
}
}
}
/** * 遍历根据节点对象下面的所有的节点对象 * @param node */ public void listNodes(Node node) { // 节点是什么类型的节点 if (node.getNodeType() == Node.ELEMENT_NODE) {// 判断是否是元素节点 Element element = (Element) node; //判断此元素节点是否有属性 if(element.hasAttributes()){ //获取属性节点的集合 NamedNodeMap namenm = element.getAttributes();//Node //遍历属性节点的集合 for(int k=0;k<namenm.getLength();k++){ //获取具体的某个属性节点 Attr attr = (Attr) namenm.item(k); System.out.println("name:::"+attr.getNodeName()+" value::" +attr.getNodeValue()+" type::"+attr.getNodeType()); } } //获取元素节点的所有孩子节点 NodeList listnode = element.getChildNodes(); //遍历 for (int j = 0; j < listnode.getLength(); j++) { //得到某个具体的节点对象 Node nd = listnode.item(j); System.out.println("name::" + nd.getNodeName() + " value:::" + nd.getNodeValue() + " type:::" + nd.getNodeType()); //重新调用遍历节点的操作的方法 listNodes(nd); } } }
4.查询某个节点对象(简单列举一些案例)
[java]
view plaincopyprint?
/**
* 根据标签的名称查找所有该名称的节点对象
*/
public void findNode(Document document) {
//根据标签名称获取该名称的所有节点对象
NodeList nodelist = document.getElementsByTagName("teacher");
//遍历
for (int i = 0; i < nodelist.getLength(); i++) {
//得到具体的某个节点对象
Node node = nodelist.item(i);
System.out.println(node.getNodeName());
}
}
/**
* 根据属性的值 查询某个节点对象
* 属性值是唯一(假设)
* @param document
* @param value
* @return
*/
public Node findNodeByAttrValue(Document document, String value) {
//根据标签名称获取该名称的节点对象集合
NodeList nodelist = document.getElementsByTagName("teacher");
//遍历
for (int i = 0; i < nodelist.getLength(); i++) {
//获取某个具体的元素节点对象
Element node = (Element) nodelist.item(i);
//根据属性名称获取该节点的属性节点对象
Attr attr = node.getAttributeNode("name");
//获取属性节点的值是否给指定的节点属性值相同
if (attr.getNodeValue().equals(value)) {
//返回此节点
return node;
}
}
return null;
}
/**
* 根据id获取某个节点对象
*
* @param document
* @param id
* @return
*/
public Node findNodeById(Document document, String id) {
return document.getElementById(id);
}
/** * 根据标签的名称查找所有该名称的节点对象 */ public void findNode(Document document) { //根据标签名称获取该名称的所有节点对象 NodeList nodelist = document.getElementsByTagName("teacher"); //遍历 for (int i = 0; i < nodelist.getLength(); i++) { //得到具体的某个节点对象 Node node = nodelist.item(i); System.out.println(node.getNodeName()); } } /** * 根据属性的值 查询某个节点对象 * 属性值是唯一(假设) * @param document * @param value * @return */ public Node findNodeByAttrValue(Document document, String value) { //根据标签名称获取该名称的节点对象集合 NodeList nodelist = document.getElementsByTagName("teacher"); //遍历 for (int i = 0; i < nodelist.getLength(); i++) { //获取某个具体的元素节点对象 Element node = (Element) nodelist.item(i); //根据属性名称获取该节点的属性节点对象 Attr attr = node.getAttributeNode("name"); //获取属性节点的值是否给指定的节点属性值相同 if (attr.getNodeValue().equals(value)) { //返回此节点 return node; } } return null; } /** * 根据id获取某个节点对象 * * @param document * @param id * @return */ public Node findNodeById(Document document, String id) { return document.getElementById(id); }
5.删除指定的节点对象
[java]
view plaincopyprint?
/**
* 删除某个节点对象
*
* @param document
* @param id
* @throws TransformerException
*/
public void deleteNodeById(Document document, String id)
throws TransformerException {
//获取删除的节点对象
Node node = document.getElementById(id);
// 是通过父节点调用removeChild(node)把子节点给删除掉
Node node1 = node.getParentNode().removeChild(node);
//创建TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
//Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
//Transformer对象通过TransformerFactory获得
Transformer transformer = transformerFactory.newTransformer();
// 把Document对象又重新写入到一个XML文件中。
transformer.transform(new DOMSource(document), new StreamResult(
new File("src//a.xml")));
}
/** * 删除某个节点对象 * * @param document * @param id * @throws TransformerException */ public void deleteNodeById(Document document, String id) throws TransformerException { //获取删除的节点对象 Node node = document.getElementById(id); // 是通过父节点调用removeChild(node)把子节点给删除掉 Node node1 = node.getParentNode().removeChild(node); //创建TransformerFactory对象 TransformerFactory transformerFactory = TransformerFactory .newInstance(); //Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出 //Transformer对象通过TransformerFactory获得 Transformer transformer = transformerFactory.newTransformer(); // 把Document对象又重新写入到一个XML文件中。 transformer.transform(new DOMSource(document), new StreamResult( new File("src//a.xml"))); }
6.更新某个节点对象
[java]
view plaincopyprint?
/**
* 更新某个节点
*
* @param document
* @param id
* @throws TransformerException
*/
public void updateNodeById(Document document, String id)
throws TransformerException {
//根据id获取元素指定的元素节点对象
Element node = document.getElementById(id);
//获取元素节点的id属性节点对象
Attr attr = node.getAttributeNode("id");
//修改元素节点的属性值
attr.setValue("x122");
//获取该节点对象的所有孩子节点对象name、age、sex节点
NodeList nodelist = node.getChildNodes();
//遍历
for (int i = 0; i < nodelist.getLength(); i++) {
//得到具体的节点对象
Node n = nodelist.item(i);
//判断是否是元素节点对象
if (n.getNodeType() == Node.ELEMENT_NODE) {
//看是否是name节点
if (n.getNodeName().equals("name")) {
n.setTextContent("君君");//修改其值
} else if (n.getNodeName().equals("age")) {//看看是否是age节点
n.setTextContent("80");//修改其值
} else if (n.getNodeName().equals("sex")) {//看看是否是sex节点
n.setTextContent("男");//修改其值
} else {
System.out.println("不做处理");
}
}
}
//创建TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
//Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
//Transformer对象通过TransformerFactory获得
Transformer transformer = transformerFactory.newTransformer();
//把Document对象又重新写入到一个XML文件中。
transformer.transform(new DOMSource(document), new StreamResult(
new File("src//b.xml")));
}
/** * 更新某个节点 * * @param document * @param id * @throws TransformerException */ public void updateNodeById(Document document, String id) throws TransformerException { //根据id获取元素指定的元素节点对象 Element node = document.getElementById(id); //获取元素节点的id属性节点对象 Attr attr = node.getAttributeNode("id"); //修改元素节点的属性值 attr.setValue("x122"); //获取该节点对象的所有孩子节点对象name、age、sex节点 NodeList nodelist = node.getChildNodes(); //遍历 for (int i = 0; i < nodelist.getLength(); i++) { //得到具体的节点对象 Node n = nodelist.item(i); //判断是否是元素节点对象 if (n.getNodeType() == Node.ELEMENT_NODE) { //看是否是name节点 if (n.getNodeName().equals("name")) { n.setTextContent("君君");//修改其值 } else if (n.getNodeName().equals("age")) {//看看是否是age节点 n.setTextContent("80");//修改其值 } else if (n.getNodeName().equals("sex")) {//看看是否是sex节点 n.setTextContent("男");//修改其值 } else { System.out.println("不做处理"); } } } //创建TransformerFactory对象 TransformerFactory transformerFactory = TransformerFactory .newInstance(); //Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出 //Transformer对象通过TransformerFactory获得 Transformer transformer = transformerFactory.newTransformer(); //把Document对象又重新写入到一个XML文件中。 transformer.transform(new DOMSource(document), new StreamResult( new File("src//b.xml"))); }
7.在某个节点的下方添加新的节点
[java]
view plaincopyprint?
/**
* 在指定的节点下方添加新得某个节点
*
* @param document
* @param id
* @throws TransformerException
*/
public void addNodeById(Document document, String id)
throws TransformerException {
//获取要添加位置节点的兄弟节点对象
Element node = document.getElementById(id);
//获取其父节点对象
Node parentNode = node.getParentNode();
//创建元素节点
Element nd = document.createElement("student");
//设置元素节点的属性值
nd.setAttribute("id", "x123");
//创建name元素节点
Node name = document.createElement("name");
//设置name节点的文本值
name.appendChild(document.createTextNode("陈红军"));
//创建age元素节点
Node age = document.createElement("age");
//设置age节点的文本值
age.appendChild(document.createTextNode("20"));
//创建sex元素节点
Node sex = document.createElement("sex");
//设置sex节点的文本值
sex.appendChild(document.createTextNode("男"));
//在nd节点中添加3个子节点
nd.appendChild(name);
nd.appendChild(age);
nd.appendChild(sex);
//在父节点中添加nd节点
parentNode.appendChild(nd);
//创建TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
//Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出
//Transformer对象通过TransformerFactory获得
Transformer transformer = transformerFactory.newTransformer();
//把Document对象又重新写入到一个XML文件中。
transformer.transform(new DOMSource(document), new StreamResult(
new File("src//c.xml")));
}
相关文章推荐
- Android开发中内存和UI优化
- 最远曼哈顿距离小结 poj 2926 Requirements&hdu 4666 Hyperspace
- 使用键盘上的send键
- 使用AJAXRequest进行AJAX应用程序开发_ajax代码
- error C2787: “LogLevel”: 没有与该对象关联的 GUID
- 使用JAXP进行DOM解析( DocumentBuilderFactory、DocumentBuilder、Document)
- iOS本地推送与取消本地通知—UILocalNotification的使用
- When to Use Delegates Instead of Interfaces (C# Programming Guide)
- Fluent Validation
- UI图片处理工具
- 修正ie不支持trim()和easyui datagrid 的rowStyler用法
- easyui动态获取combobox显示
- [SPOJ SEQN] [hdu3439]Sequence
- ZOJ-1649 Rescue BFS (HDU 1242)
- ZOJ-1649 Rescue BFS (HDU 1242)
- extjs4为列添加quicktips
- PAT(Advance Level) 1007 Maximum Subsequence Sum 解题报告
- ios UICollectionView的使用
- 第三次作业,GUI设计之最大子序列和
- 关于 GUITOOL 修改日志