2010-10-25 103 views
0

我想使用dom修改xml文件,但是當我創建node.getNodeValue();它返回null!我不知道爲什麼?我的XML文件包含以下標籤: [person] which contains child [name] which contains childs [firstname ,middleInitial ,lastName] childsXML Dom處理

我想更新的名字,middleInitial和使用DOM 姓氏,這是我的Java的DOM處理文件:

 
    NodeList refPeopleList = doc.getElementsByTagName("person");

for (int i = 0; i < refPeopleList.getLength(); i++) { NodeList personList = refPeopleList.item(i).getChildNodes(); for (int personDetalisCnt = 0; personDetalisCnt < refPeopleList.getLength(); personDetalisCnt++) { { currentNode = personList.item(personDetalisCnt); String nodeName = currentNode.getNodeName(); System.out.println("node name is " + nodeName); if (nodeName.equals("name")) { System.out.println("indise name"); NodeList nameList = currentNode.getChildNodes(); for(int cnt=0;cnt<nameList.getLength();cnt++) { currentNode=nameList.item(cnt); if(currentNode.getNodeName().equals("firstName")) { System.out.println("MODIFID NAME :"+currentNode.getNodeValue()); //prints null System.out.println("indide fname"+" node name is "+currentNode.getNodeName()); //prints firstName String nodeValue="salma"; currentNode.setNodeValue(nodeValue); System.out.println("MODIFID NAME :"+currentNode.getNodeValue());//prints null } } } }
+0

你可以寫一個簡單的助手類來完成你的任務。看到這個http://stackoverflow.com/a/8346867/851432 – Jomoos 2011-12-01 19:17:10

回答

2

而不是呼籲<firstName>getNodeValue()/setNodeValue()請嘗試獲取firstName元素的文本節點子節點,並在其上調用getNodeValue()/setNodeValue()

嘗試

if(currentNode.getNodeName().equals("firstName")) 
{ 
    Node textNode = currentNode.getFirstChild(); 
    System.out.println("Initial value:" + textNode.getNodeValue()); 
    String nodeValue="salma"; 
    textNode.setNodeValue(nodeValue); 
    System.out.println("Modified value:" + textNode.getNodeValue()); 
} 

DOM spec

屬性節點名稱,的nodeValue和 屬性包含作爲一種機制 獲取節點信息,而無需 拆毀到特定的衍生 接口。在情況下,有這些屬性 用於特定節點類型的無 明顯的映射(例如, 的nodeValue爲元素或用於註釋屬性 ),這將返回

類似地,在Node interface的Java文檔中,靠近頂部的表格顯示元素的nodeValue爲null。

這就是爲什麼在元素上使用getNodeValue將始終返回null,爲什麼需要首先使用getFirstChild()才能獲取文本節點(假定沒有其他子節點)。如果有元素和文本子節點的混合,則可以使用getNodeType()來檢查哪個子節點是哪個(文本是類型3)。

+0

firstName元素是簡單的數據類型,它沒有孩子,我怎麼能得到元素的孩子? – palAlaa 2010-10-25 20:18:41

+1

firstName元素沒有child * elements *,但它確實有一個child * text節點*。 firstName元素中的文本不在元素本身上,而是元素的文本節點子元素的值。 – LarsH 2010-10-25 20:31:35

+0

@Alaa,我編輯了我的答案,以提供有關子文本節點的更多詳細信息。 – LarsH 2010-10-25 20:46:58

0

難道是firstNamefirstname(看案例)。

+0

它的名字,它只是寫錯了 – palAlaa 2010-10-25 20:56:38