//本身Element中就不包含setTextContent属性。set出来的就只有setNodeValue和setAttribute这些。不知道是不是包引用出错了吗?
package com.imooc.XML;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
//创建一个documentBuilderFactory的对象
public class DOMTest {
public void createXML() {
DocumentBuilder db = getDocumentBuilder();
Document document = db.newDocument();
Element bookstore = document.createElement("bookStore");
// 向bookstore中添加子节点book
Element book = document.createElement("book");
Element name = document.createElement("name");
// name.getFirstChild().setNodeValue("冰与火之歌");
name.setTextContent("冰与火之歌");
book.appendChild(name);
book.setAttribute("id", "1");
// 将book节点添加到bookstore中
bookstore.appendChild(book);
// 将bookstore(已经包含了book)添加到dom树中
document.appendChild(bookstore);
// 将现有的树结构转换成xml文件
//创建Transformerfactory对象
TransformerFactory tsf = TransformerFactory.newInstance();
try {
//创建transformer对象
Transformer tf = tsf.newTransformer();
//xml文件输出中进行换行
tf.setOutputProperty(OutputKeys.INDENT,"yes");
tf.transform(new DOMSource(document), new StreamResult(new File("books1.xml")));
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void DOMTest() {
// 创建一个documentBuilder的对象
try {
DocumentBuilder db = getDocumentBuilder();
// 通过documentBuilder对象的parse方法加载xml文件到当前项目下。
Document document = db.parse("books.xml");
// 通过document的getElementByTagName获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("book");
// 遍历bookList
System.out.println("一共有" + bookList.getLength() + "本书");
for (int i = 0; i < bookList.getLength(); i++) {
System.out.println("--------下面开始遍历第" + (i + 1) + "本书的内容--------");
Node book = bookList.item(i);
// 遍历book的属性
NamedNodeMap attrs = book.getAttributes();
System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength() + "属性");
for (int j = 0; j < attrs.getLength(); j++) {
// 通过item(index)方法获取某一个属性
Node attr = attrs.item(j);
System.out.println("属性名:" + attr.getNodeName());
System.out.println("--属性值:" + attr.getNodeValue());
}
// book节点只有一个属性,并且属性名是id,我们需要知道id的属性值。可以通过强制类型转换,将node转换成Element类型。
// Element book = (Element)bookList.item(i);
// String attrValue = book.getAttribute("id");
// System.out.println("id属性的属性值位:"+attrValue);
// 解析book节点的子节点
NodeList childNodes = book.getChildNodes();
System.out.println("第" + (i + 1) + "本书共有" + childNodes.getLength() + "个子节点");
for (int k = 0; k < childNodes.getLength(); k++) {
// 区分text类型的node和element类型的node
if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
String name = childNodes.item(k).getNodeName();
System.out.print("第" + (k + 1) + "个节点的节点名:" + name);
// System.out.println("--节点值是"+childNodes.item(k).getTextContent());
System.out.println("--节点值是" + childNodes.item(k).getFirstChild().getNodeValue());
}
}
System.out.println("--------结束遍历第" + (i + 1) + "本书的内容--------");
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public DocumentBuilder getDocumentBuilder() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return db;
}
public static void main(String[] args) {
DOMTest dom = new DOMTest();
dom.createXML();
// DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// // 创建一个documentBuilder的对象
// try {
// DocumentBuilder db = dbf.newDocumentBuilder();
// // 通过documentBuilder对象的parse方法加载xml文件到当前项目下。
// Document document = db.parse("books.xml");
// // 通过document的getElementByTagName获取所有book节点的集合
// NodeList bookList = document.getElementsByTagName("book");
// // 遍历bookList
// System.out.println("一共有" + bookList.getLength() + "本书");
// for (int i = 0; i < bookList.getLength(); i++) {
// System.out.println("--------下面开始遍历第" + (i + 1) + "本书的内容--------");
// Node book = bookList.item(i);
// // 遍历book的属性
// NamedNodeMap attrs = book.getAttributes();
// System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength() + "属性");
// for (int j = 0; j < attrs.getLength(); j++) {
// // 通过item(index)方法获取某一个属性
// Node attr = attrs.item(j);
// System.out.println("属性名:" + attr.getNodeName());
// System.out.println("--属性值:" + attr.getNodeValue());
// }
//
// // book节点只有一个属性,并且属性名是id,我们需要知道id的属性值。可以通过强制类型转换,将node转换成Element类型。
// // Element book = (Element)bookList.item(i);
// // String attrValue = book.getAttribute("id");
// // System.out.println("id属性的属性值位:"+attrValue);
//
// // 解析book节点的子节点
// NodeList childNodes = book.getChildNodes();
// System.out.println("第" + (i + 1) + "本书共有" + childNodes.getLength() + "个子节点");
// for (int k = 0; k < childNodes.getLength(); k++) {
// // 区分text类型的node和element类型的node
// if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
// String name = childNodes.item(k).getNodeName();
// System.out.print("第" + (k + 1) + "个节点的节点名:" + name);
// // System.out.println("--节点值是"+childNodes.item(k).getTextContent());
// System.out.println("--节点值是" + childNodes.item(k).getFirstChild().getNodeValue());
// }
// }
// System.out.println("--------结束遍历第" + (i + 1) + "本书的内容--------");
// }
// } catch (ParserConfigurationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (SAXException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
}
添加回答
举报
0/150
提交
取消