当前位置: 代码迷 >> J2SE >> 关于XML初学者有关问题
  详细解决方案

关于XML初学者有关问题

热度:34   发布时间:2016-04-24 00:46:56.0
关于XML菜鸟问题
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());
------解决方案--------------------
探讨

我运行为啥没问题?

Java code

ByteArrayInputStream bais = new ByteArrayInputStream("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<书架><书><书名>魔兽世界法师攻略</书名><作者>皮卡丘</作者><售价>100.00</售价></书><书><书名>魔兽世界萨满……
  相关解决方案