//本身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(); // } } }
相关分类