如题:
xml文件内容如下:
-------------------------------------------------
- XML code
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE pets[<!ELEMENT pets (dog,penguin)><!ELEMENT dog (love,health,rehealth,addlove)><!ELEMENT penguin (love,health,rehealth,addlove)>]><pets> <dog> <love>0</love> <health>100</health> <rehealth>5</rehealth> <addlove>10</addlove> </dog> <penguin> <love>0</love> <health>100</health> <rehealth>10</rehealth> <addlove>15</addlove> </penguin></pets>
---------------------------------------------
解析代码如下:
- Java code
package cn.jbit.Test;import java.io.IOException;import javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXException;public class Test { /** * @param args */ public static void main(String[] args) { DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); try { DocumentBuilder db=dbf.newDocumentBuilder(); Document doc=db.parse("PetInfo.xml"); //获取根节点 Node pets=doc.getDocumentElement(); //获取根节点下的所有子节点 NodeList dogAndpenguin=pets.getChildNodes(); //开始遍历 for(int i=0;i<dogAndpenguin.getLength();i++){ if(dogAndpenguin.item(i).getNodeType()==Node.ELEMENT_NODE){ System.out.println(dogAndpenguin.item(i).getNodeName()); NodeList infos=dogAndpenguin.item(i).getChildNodes(); for(int j=0;j<infos.getLength();j++){ if(infos.item(j).getNodeType()==Node.ELEMENT_NODE) System.out.println(infos.item(j).getNodeName()); System.out.println(infos.item(j).getNodeValue()); } } } } 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(); } }}
------------------------------------
结果为:
dog
love
null
health
null
rehealth
null
addlove
null
penguin
love
null
health
null
rehealth
null
addlove
null
------------------------
我确实不知道哪里出错了,解析的节点都正确,但解析节点的值却全是空的,高手们帮下忙!
------解决方案--------------------
if(infos.item(j).getNodeType()==Node.ELEMENT_NODE) {
System.out.println(infos.item(j).getNodeName());
System.out.println(infos.item(j).getTextContent());
}
要获取<health>100</health>中间的内容的值要用getTextContext(),
100其实也是一个节点是一个text类型的节点,它是health的子节点,并不是health的值