2011-08-26 81 views
1

我的代碼在所需的機器級別插入新的信譽對。在xml中使用dom4j在指定位置添加新節點

Document insertNewNode(String loginId,String pass,String machine_name) 
{ 
List<?> list1 = document.selectNodes("//machine/@name"); 
Iterator<?> itr=list1.iterator(); 
while(itr.hasNext()){ 
Attribute attribute=(Attribute)itr.next(); 
if(attribute.getValue().equals(machine_name)) 
{ 
    List<?> list1 = document.selectNodes("//machine"); 
    Iterator<?> iter=list.iterator(); 
    while(iter.hasNext()){ 
    Element credPairs=(Element)iter.next(); 
    Element credPair =credPairs.addElement("cred-pair"); 
    Element login =credPair.addElement("login"); 
    element.setText(loginId); 
    Element password =credPair.addElement("password"); 
    element.setText(pass); 

} 

} 
} 
} 

原始的XML:

<credentials> 
<machine name="xyz"> 
<cred-pairs> 
<cred-pair> 
<login>asad</login> 
<password>12345</password> 
</cred-pair> 
<cred-pairs> 
</machine> 
<machine name="pqr"> 
<cred-pair> 
<cred-pair> 
<login>ssdas</login> 
<password>12345</password> 
</cred-pair> 
<cred-pairs> 
</machine> 
</credentials> 

如果我打電話insertNewNode(GGSS,97653,XYZ)

預期的XML:

<credentials> 
<machine name="xyz"> 
    <cred-pairs> 
    <cred-pair> 
    <login>asad</login> 
    <password>12345</password> 
    </cred-pair> 
**<cred-pair> 
    <login>ggss</login> 
    <password>97653</password> 
    </cred-pair>** 
    <cred-pairs> 
</machine> 
<machine name="pqr"> 
    <cred-pair> 
    <cred-pair> 
    <login>ssdas</login> 
    <password>12345</password> 
    </cred-pair> 
    <cred-pairs> 
</machine> 
</credentials> 

但我正在逐漸輸出:

<credentials> 
<machine name="xyz"> 
    <cred-pairs> 
    <cred-pair> 
    <login>asad</login> 
    <password>12345</password> 
    </cred-pair> 
** <cred-pair> 
    <login>ggss</login> 
    <password>97653</password> 
    </cred-pair>** 
    <cred-pairs> 
</machine> 
<machine name="pqr"> 
    <cred-pair> 
    <cred-pair> 
    <login>ssdas</login> 
    <password>12345</password> 
    </cred-pair> 
**<cred-pair> 
    <login>ggss</login> 
    <password>97653</password> 
    </cred-pair> 
    <cred-pairs>** 
</machine> 
</credentials> 

回答

1

縮進後,我看到,你的xml格式不正確。在</machine>之前有一個<cred-pairs>開標籤,那在那個地方是非法的。可能是複製/粘貼錯誤。

當您找到正確的機器名稱屬性後,您可以選擇全部機器節點並將憑證添加到每臺機器節點。相反,你不應該選擇屬性,但是,對於機器名出線的元素:

List<Element> machines = document.selectNodes(String.format("//machine[@name='%s']", machine_name); 
for (Element machine:machines) { 
    Element credPairs=(Element)iter.next(); 
    Element credPair =credPairs.addElement("cred-pair"); 
    Element login =credPair.addElement("login"); 
    login.setText(loginId); 
    Element password =credPair.addElement("password"); 
    password.setText(pass); 
    machine.addElement(credPairs);  
} 

未經測試,但應該工作(或顯示您的方向)

+0

感謝lot..You救了我day..Andreas_D – user896456