RT,config_test.xml内容如下:
<?xml version="1.0" encoding="GB2312"?>
<Configurations>
<Value>
<StationOrArea>station</StationOrArea>
<DatabaseIP>11.11.11.111</DatabaseIP>
<DatabasePort>1111</DatabasePort>
<DatabaseName>test</DatabaseName>
<DatabaseUserName>test</DatabaseUserName>
<DatabasePassword>test</DatabasePassword>
<DatabaseSpaceName>test</DatabaseSpaceName>
<StationCode>35005</StationCode>
<StationID>o1</StationID>
<InstitudeCode>QZ</InstitudeCode>
<EpdFilePath>/opt/gather/epddata</EpdFilePath>
<StateFilePath>/opt/gather/statdata</StateFilePath>
<FtpFilePath>/opt/gather/ftpdata</FtpFilePath>
<MemPath>/opt/gather</MemPath>
<ExceptionPath>/opt/gather/exceptiondata</ExceptionPath>
<PublicConfigFile>/opt/test/test_datamanager_config.xml</PublicConfigFile>
<SysLogPath>/opt/gather/logdata</SysLogPath>
<CodeFile>/opt/gather/item.conf</CodeFile>
<RealTimeConnectLimit>99</RealTimeConnectLimit>
<DeviceQueueLimit>1</DeviceQueueLimit>
<RealTimePriority>2</RealTimePriority>
<ValidLimit>10</ValidLimit>
<ReportIP>11.11.11.111</ReportIP>
<ReportPort>9999</ReportPort>
<ShutdownKey>grid</ShutdownKey>
<BufferConfigFile>/opt/gather/buffer.xml</BufferConfigFile>
<TimeConfigFile>/opt/gather/time.xml</TimeConfigFile>
</Value>
</Configurations>
解析代码如下:package readXML;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.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class ReadXML {

private DocumentBuilderFactory dbf= null;
private DocumentBuilder db = null;
private Document doc = null;

public ReadXML(String file){

try {
dbf = DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
doc = db.parse(file);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public void getXMLParas(){
Element root = doc.getDocumentElement();
NodeList nodelist = root.getElementsByTagName("Value");
for(int i=0;i<nodelist.getLength();i++){
System.out.println("Value "+(i+1)+" is: "
+nodelist.item(i).getFirstChild().getNodeValue().toString());
}
}

public static void main(String[] args) {
ReadXML readxml = null;
readxml = new ReadXML("c:\\config_test.xml");
readxml.getXMLParas();
}}
目的很显然,就是为了打印XML文件里的所有元素的值
可现在打印结果却是空,请问怎么办?

解决方案 »

  1.   

     public void getXMLParas(){
            Element root = doc.getDocumentElement();
            System.out.println(root.getNodeName());
            Node node = root.getElementsByTagName("Value").item(0);
            NodeList nodelist = node.getChildNodes();
            System.out.println(nodelist.getLength());
            for(int i=0;i<nodelist.getLength();i++){
                System.out.println(nodelist.item(i).getNodeName() + " is: "
                        +nodelist.item(i).getTextContent());
            }
        }
      

  2.   

    谢谢你,不过我有个问题想问一下你,为什么我的输出是:
    Configurations
    #text is: StationOrArea is: station
    #text is: DatabaseIP is: 11.11.11.111
    #text is: ……
    就是下边总有一个#text is: 这是哪里来的呢?
      

  3.   

    这个我也不知道 可能是他把text也作为一个node. 
      

  4.   

    DOM下text文本也是作为一个text node来的
      

  5.   

    其实就两个<><>之间的空白处 也就是你文件中的换行 你要是全部写在一行就没有了
      

  6.   

    你的意思是只要我解析相应元素的value值,就会产生一个text node?
      

  7.   

    可以判断是否是text node,忽略掉就可以了
      

  8.   

    public void getXMLParas(){
            Element root = doc.getDocumentElement();
            System.out.println(root.getNodeName());
            Node node = root.getElementsByTagName("Value").item(0);
            NodeList nodelist = node.getChildNodes();
            System.out.println(nodelist.getLength());
            for(int i=0;i<nodelist.getLength();i++){
             if(nodelist.item(i).getNodeType()!=Node.TEXT_NODE)此处判断
             System.out.println(nodelist.item(i).getNodeName() + " is: "
                        +nodelist.item(i).getTextContent());
            }
        }
      

  9.   

    嗯,谢谢你~~
    我想问问如果我的XML文件中将<Value></Value>去掉,然后怎么解析各个元素及值呢?
    及XML文件变为<?xml version="1.0" encoding="GB2312"?> 
    <Configurations> <StationOrArea>station </StationOrArea> 
    <DatabaseIP>11.11.11.111 </DatabaseIP> 
    <DatabasePort>1111 </DatabasePort> 
    <DatabaseName>test </DatabaseName> 
    <DatabaseUserName>test </DatabaseUserName> 
    <DatabasePassword>test </DatabasePassword> 
    <DatabaseSpaceName>test </DatabaseSpaceName> 
    <StationCode>35005 </StationCode> 
    <StationID>o1 </StationID> 
    <InstitudeCode>QZ </InstitudeCode> 
    <EpdFilePath>/opt/gather/epddata </EpdFilePath> 
    <StateFilePath>/opt/gather/statdata </StateFilePath> 
    <FtpFilePath>/opt/gather/ftpdata </FtpFilePath> 
    <MemPath>/opt/gather </MemPath> 
    <ExceptionPath>/opt/gather/exceptiondata </ExceptionPath> 
    <PublicConfigFile>/opt/test/test_datamanager_config.xml </PublicConfigFile> 
    <SysLogPath>/opt/gather/logdata </SysLogPath> 
    <CodeFile>/opt/gather/item.conf </CodeFile> 
    <RealTimeConnectLimit>99 </RealTimeConnectLimit> 
    <DeviceQueueLimit>1 </DeviceQueueLimit> 
    <RealTimePriority>2 </RealTimePriority> 
    <ValidLimit>10 </ValidLimit> 
    <ReportIP>11.11.11.111 </ReportIP> 
    <ReportPort>9999 </ReportPort> 
    <ShutdownKey>grid </ShutdownKey> 
    <BufferConfigFile>/opt/gather/buffer.xml </BufferConfigFile> 
    <TimeConfigFile>/opt/gather/time.xml </TimeConfigFile> </Configurations> 
      

  10.   

    public void getXMLParas(){
            Element root = doc.getDocumentElement();
            System.out.println(root.getNodeName());
            NodeList nodelist = root.getChildNodes();
            System.out.println(nodelist.getLength());
            for(int i=0;i<nodelist.getLength();i++){
             if(nodelist.item(i).getNodeType()!=Node.TEXT_NODE)
             System.out.println(nodelist.item(i).getNodeName() + " is: "
                        +nodelist.item(i).getTextContent());
            }
        }
      

  11.   

    为何不用DOM4J ,这样会不会爽些呢