Raven1
2016-07-22 02:08
package imooc.dmtest; import java.io.File; import java.io.IOException; import javax.lang.model.element.Element; import javax.swing.text.Document; 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.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.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DOMTest { /** * 创建一个DocumentBuilder * @return */ public DocumentBuilder getDocumentBuilder() { // 创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 创建DocumentBuilder对象 DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } return db; } /** * 解析XMl文件 */ public void xmlParser() { try { // 通过DocumentBuilder对象的parser方法加载book.xml文件到当前项目下 org.w3c.dom.Document document = getDocumentBuilder().parse("book.xml"); // 获取所有book节点的集合 NodeList booklist = document.getElementsByTagName("book"); // 通过nodelist的getlength()方法可以获取booklist的长度 System.out.println("一共有" + booklist.getLength() + "本书"); // 遍历每一个book节点 for (int i = 0; i < booklist.getLength(); i++) { System.out.println("==========================下面开始遍历第" + (i + 1) + "这本书的内容=========="); // 通过item(i)获取一个book节点,Nodelist的索引值从0开始 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(intex)方法获取book节点的某一个属性 Node attr = attrs.item(j); // 获取属性名 System.out.print("属性名:" + attr.getNodeName()); // 获取属性值 System.out.println("--属性值" + attr.getNodeValue()); } // 前提:已经知道book节点有些只有一个id属性 // 讲book节点强制进行类型转换,转换成Element类型 // org.w3c.dom.Element book = (org.w3c.dom.Element) // booklist.item(i); // //获取属性值 // String attrValue = book.getAttribute("id"); // System.out.println("id属性的属性值为"+ attrValue); // 解析book节点的子节点 NodeList childNodes = book.getChildNodes(); // 遍历childNodes获取每个节点的节点名和节点值 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) { // 获取了element类型节点的节点名 System.out.print(childNodes.item(k).getNodeName() + ":"); // 获取了element类型节点的节点值 // System.out.println(childNodes.item(k).getFirstChild().getNodeValue()); System.out.println(childNodes.item(k).getTextContent()); } } System.out.println("=========================结束遍历第" + (i + 1) + "这本书的内容=========="); } } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 生成xml的方法 */ public void createXML() { // 创建DOMTest对象 DocumentBuilder db = getDocumentBuilder(); org.w3c.dom.Document document = db.newDocument(); document.setXmlStandalone(true); org.w3c.dom.Element bookstore = document.createElement("bookStore"); // 向bookstore根节点中添加子节点book org.w3c.dom.Element book = document.createElement("book"); org.w3c.dom.Element name = document.createElement("name"); org.w3c.dom.Element author = document.createElement("author"); org.w3c.dom.Element year = document.createElement("year"); org.w3c.dom.Element price = document.createElement("price"); org.w3c.dom.Element language = document.createElement("language"); // name.setNodeValue("xiaomingzi");行不通 name.setTextContent("小王子"); author.setTextContent("安托万·德·圣·埃克苏佩里"); year.setTextContent("1942"); price.setTextContent("22"); book.appendChild(name); book.appendChild(author); book.appendChild(year); book.appendChild(price); //设置book的属性 book.setAttribute("id", "1"); // 将book节点添加到bookstore根节点中 bookstore.appendChild(book); //此处尝试添加第二本书,之前由于变量名重复造成失败,现在改变量名之后成功添加第二本书 org.w3c.dom.Element book1 = document.createElement("book"); org.w3c.dom.Element name1 = document.createElement("name"); org.w3c.dom.Element author1 = document.createElement("author"); org.w3c.dom.Element year1 = document.createElement("year"); org.w3c.dom.Element price1 = document.createElement("price"); name1.setTextContent("冰与火之歌"); author1.setTextContent("乔治马丁"); year1.setTextContent("2014"); price1.setTextContent("89"); book1.appendChild(name1); book1.appendChild(author1); book1.appendChild(year1); book1.appendChild(price1); book1.setAttribute("id", "2"); bookstore.appendChild(book1); // 将bookstores节点(已经包含了book)添加到dom树中 document.appendChild(bookstore); // 创建TransformFactory对象 TransformerFactory tff = TransformerFactory.newInstance(); try { Transformer tf = tff.newTransformer(); // 设置换行 tf.setOutputProperty(OutputKeys.INDENT, "yes"); //设置缩进量 tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); tf.transform(new DOMSource(document), new StreamResult(new File("books1.xml"))); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } /** * 主方法,程序的入口 * * @param args */ public static void main(String[] args) { // 创建DOMTest对象 DOMTest test = new DOMTest(); // 调用解析方法,解析XMl文件 test.createXML(); } }
问题已解决呢就没什么看的了
Java眼中的XML 文件写入
55798 学习 · 132 问题
相似问题