猿问

setTextContent报错了

//本身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();
//		}
	}

}


慕粉151646526
浏览 2629回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答