|
//本身Element中就不包含setTextContent属性。set出来的就只有setNodeValue和setAttribute这些。不知道是不是包引用出错了吗?package com.eravik.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();// } }} |