我嘗試檢索XML節點值時出現問題。沒有一點解釋就很難問這個問題。我有一個我創建的服務器 - 客戶端聊天室,服務器處理所有包含用戶用戶名的XML數據。例如,用戶發送將廣播給服務器上的每個人的消息。當消息到達服務器時,服務器將根據用戶當前的IP地址檢查陣列。如果IP位於陣列中,則具有相應編號的另一個陣列將返回用戶名,然後將其廣播給所有聊天室用戶。當新用戶或離線用戶加入服務器時,我的問題就會出現。如果IP不在陣列中,服務器將檢查一個XML文件,該文件包含所有在線用戶或舊用戶的最後一個已知IP(此部分已針對擁有新IP的舊用戶進行解析),然後服務器將其添加到陣列。這在理論上可行,但在代碼中它不會產生相同的結果。我能夠將當前IP添加到數組,但我無法獲得用戶名。我相信這是因爲用戶的舊IP是節點名稱,用戶名是節點值。 例如: Usernames.xml文件如何正確讀取XML文件中的節點值?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Server>
<i0000>User</i0000>
<i1921681114>Chappy</i1921681114>
</Server>
應該將其添加到陣列的功能:
public static void addInArray(String IPtoCheck) throws Exception{
File fXmlFile = new File("Usernames.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName(IPtoCheck);
for(int i=0; nList.getLength()>i; i++){
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
if(eElement.getNodeName().equals(IPtoCheck)){
int used = 0;
while (used < 63){
if(IPs[used].equals("no")){
IPs[used] = IPtoCheck;
usernames[used] = eElement.getNodeValue();
AppendArea.Apen(3, usernames[used]);
break;
}
used++;
}
}
}
}
}
此外,我要補充的是我沒有使用
Arrays.fill(IPs, "no");
Arrays.fill(usernames, "no");
沒有表示開放陣列點
此外IPtoCheck字符串我是修改後的IP值。例如,在XML文件中的IP節點是:
i1921681114
這其實是192.168.1.114
所有這些詳盡的解釋後,我的問題如下:
如何正確閱讀使用Java的XML文件中的節點值?
因爲eElement.getNodeValue();沒有返回正確的值,它只返回「空」
謝謝你回答我的問題!但是我只是在xml中添加了一個具有相同值的屬性,並調用.getAttribute,它的工作原理是一樣的。不管怎麼說,多謝拉! –
屬性以不同的方式工作,因爲他們沒有孩子。被稱爲元素的* node value *的屬性取決於它的子元素。其他API(或實現)可以將其評估爲字符串值,並將其默認分配給元素。 – helderdarocha