2013-02-03 72 views
0

我可以在我的方法中添加什麼行代碼,只會修改標記名「location」,因爲它只包含名爲「address?」的節點下的特定信息。所以,如果我更新「顏色」或「大小」,那麼我可以告訴nodeList:「只有當它包含123 Main Street in」地址「時,才更改這些值。我試過所有類型的」等等「。 。我用object.getAddress作爲我的變量的對象,我要覈對 XML有50項:如何從java中的特定XML元素中檢索

<location> 
    <address>123 Main Street</address> 
    <color>red</color> 
    <size>large</size> 
</location> 


public void changeValue(Document doc, String oldValue, String NewValue) throws   Exception { 
    Element root = doc.getDocumentElement(); 
    NodeList childNodes = root.getElementsByTagName("location"); 
    for (int i = 0; i < childNodes.getLength(); i++) { 
     NodeList subChildNodes = childNodes.item(i).getChildNodes(); 
     for (int j = 0; j < subChildNodes.getLength(); j++) { 
      try { 
       if (subChildNodes.item(j).getTextContent().equals(oldValue)) { 
        subChildNodes.item(j).setTextContent(NewValue); 
       } 
      } catch (Exception e) { 
      } 
     } 
    } 
    File file = new File("XMLDatabase.xml"); 
    save(file, doc); 
} 
+0

哪裏是你,你得到一個錯誤!不能用newValue替換oldValue嗎?請解釋一下嗎? –

+0

如果我沒有錯,你想改變顏色或者大小,如果你可以匹配地址。如果這是你想要的if循環嘗試初始化一個局部的int變量併爲其賦值j,並簡單地將新的顏色和大小的值設置爲subChildNodes.item(local int + 2).setTextContent(「你想設置的值」);這有幫助嗎?如果不明確? –

+0

我沒有收到錯誤。是的,你說得對,只要地址相符,我想改變顏色或大小。我實際上有一個全局對象,其中包含我想檢查的地址。如果我不檢查它與對象然後我不能控制循環,因爲它更新我不想更改的其他節點。 –

回答

0

我希望這有助於

for (int i = 0; i < childNodes.getLength(); i++) { 
     NodeList subChildNodes = childNodes.item(i).getChildNodes(); 
     for (int j = 0; j < subChildNodes.getLength(); j++) { 
      try { 
       if (subChildNodes.item(j).getTextContent().equals("123 Main Street")) { 
        int temp=j; 
        subChildNodes.item(temp).setTextContent("value you want to set"); 
        subChildNodes.item(temp+2).setTextContent("value you want to set"); 
        subChildNodes.item(temp+4).setTextContent("value you want to set"); 
       } 
      } catch (Exception e) { 
      } 
     } 
} 
+0

謝謝你,先生。我會試試這個! :) –

相關問題