2013-02-03 45 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

谢谢你,先生。我会试试这个! :) –

相关问题