2011-08-26 113 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