- XML code
<?xml version="1.0" encoding="UTF-8" ?><书架> <书> <书名>魔兽世界法师攻略</书名> <作者>皮卡丘</作者> <售价>100.00</售价> </书> <书> <书名>魔兽世界萨满攻略</书名> <作者>杰尼龟</作者> <售价>100.00</售价> </书></书架>
- Java code
package com.wow.test1;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class Test { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder =factory.newDocumentBuilder(); Document document =builder.parse("src\\book.xml"); NodeList list=document.getElementsByTagName("书"); System.out.println(list.item(0).getTextContent()); System.out.println(list.item(0).getFirstChild().getNodeValue()); }}
小弟想问的是list.item(0).getTextContent()和list.item(0).getFirstChild().getNodeValue()的区别是什么?
为什么getElementsByTagName("书");的时候list.item(0).getFirstChild().getNodeValue()没有打印的内容?
------解决方案--------------------
情况有点复杂,跟XML规范有关。
XML中,只有 属性、备注、文本,这几种节点才有nodeValue。
而文本,不是你理解的:
“<书名>魔兽世界法师攻略</书名>”
这个东西,而是<书名>这个节点之内还有一个文本节点是:
“魔兽世界法师攻略”
比如有节点为:
<书名>魔兽世界<强调>法师</强调>攻略</书名>
那么书名下面有三个字节点,分别为:
文本节点:魔兽世界
元素节点:<强调>
文本节点:攻略
说了半天不知道你明白了没有,总的来说应该是:
System.out.println(list.item(0).getFirstChild().getFirstChild().getNodeValue());
或者:
System.out.println(list.item(0).getFirstChild().getTextContent());
------解决方案--------------------