2013-10-15 62 views
0

我無法解析xml文件並從中檢索數據。以下是xml和代碼片段。 ----- XML(的test.xml)-----Xpath表達式計算爲空節點列表

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<Server> 
<IPAddress>xxx.xxx.xxx.xxx</IPAddress> 
<UserName>admin</UserName> 
<Password>admin</Password> 
</Server> 

-----代碼段:-----

public static String getInput(String element) 
{ 
    String value = ""; 
    try { 

     File inputFile = new File("test.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = dbFactory.newDocumentBuilder(); 
     Document inputData = builder.parse(inputFile); 
     inputData.getDocumentElement().normalize(); 
     String[] elementArray = element.split("/"); 

     XPath xPath = XPathFactory.newInstance().newXPath(); 
     String xpathExpression = element; 

     System.out.println("Xpath Expression:" + xpathExpression); 
       NodeList node = (NodeList) xPath.compile(xpathExpression).evaluate(inputData, XPathConstants.NODESET); 
     System.out.println(node.getLength()); 

     if (null != node){ 
       System.out.println(node.getLength()); 
       for (int i=0; i<node.getLength(); i++){ 
        System.out.println(i); 
        System.out.println("Node count =" + node.getLength() + ";" + 
         "Node Name =" + node.item(i).getNodeName()); 

       if (node.item(i).getNodeName() == elementArray[1]){ 
        System.out.println(node.item(i).getNodeName()+ "=" + node.item(i).getNodeValue()); 
        value = node.item(i).getNodeValue(); 
       } 

      } 
     }   

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return value; 
} 

代碼編譯確定。運行時,它似乎沒有找到節點「服務器」,並且它是子節點「IPAddress」。到getInput()的調用以上將來自主要在以下格式:

getInput("Server/IPAddress"); 

不知道到哪裏去錯誤的,我真的很新的Xpath。我想知道是否有人可以提供幫助。

謝謝!

回答

0

最外面的元素是<root/>,而不是<server/>。您的查詢必須

getInput("root/Server/IPAddress") 

,如果你想使用的完整路徑,甚至

getInput("/root/Server/IPAddress") 

,表示你開始的根元素。或者,你可以有XPath來搜索所有服務器元素在上述文檔:

getInput("//Server/IPAddress") 

所有這些將輸出

Xpath Expression:root/Server/IPAddress 
1 
1 
0 
Node count =1;Node Name =IPAddress 

,而不是

Xpath Expression:Server/IPAddress 
0 
0 

你可以以某種方式預先安排一個當然,您在getInput()函數中選擇的前綴。

+0

感謝您的快速幫助!那麼,「Server/IPAddress」和「// Server/IPAddress」有什麼區別? – user2882622

+0

開頭的'/'表示表達式從根節點開始; '//'也可以,但掃描整個文檔('//'是'後代或自己的'軸)。完全沒有斜線意味着你從當前上下文開始,這也是(如果沒有另外設置)根節點。 –