Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在xml中使用dom4j在指定位置添加新节点_Java_Xml_Xpath_Dom4j - Fatal编程技术网

Java 在xml中使用dom4j在指定位置添加新节点

Java 在xml中使用dom4j在指定位置添加新节点,java,xml,xpath,dom4j,Java,Xml,Xpath,Dom4j,我的代码用于在所需的机器级别插入新的cred对 Document insertNewNode(String loginId,String pass,String machine_name) { List<?> list1 = document.selectNodes("//machine/@name" ); Iterator<?> itr=list1.iterator(); while(itr.hasNext()){ Attribute attribute=(Attrib

我的代码用于在所需的机器级别插入新的cred对

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);

}

}
}
}
Document insertNewNode(字符串loginId、字符串pass、字符串machine\u name)
{
List list1=document.selectNodes(“//machine/@name”);
迭代器itr=list1.Iterator();
while(itr.hasNext()){
属性=(属性)itr.next();
if(attribute.getValue().equals(machine_name))
{
List list1=document.selectNodes(“//机器”);
迭代器iter=list.Iterator();
while(iter.hasNext()){
Element credPairs=(Element)iter.next();
credPair元素=credPair.addElement(“cred对”);
元素登录名=credPair.addElement(“登录名”);
元素setText(loginId);
元素密码=credPair.addElement(“密码”);
元素。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>

阿萨德
12345
ssdas
12345
如果我调用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>

阿萨德
12345
**
ggss
97653
**
ssdas
12345
但我得到的结果是:

<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>

阿萨德
12345
** 
ggss
97653
**
ssdas
12345
**
ggss
97653
**

在缩进之后,我发现您的xml格式不好。在
前面有一个
打开标签,在那个地方是非法的。可能是复制/粘贴错误

找到正确的机器名属性后,选择所有机器节点并将凭据添加到每个机器节点。相反,您不应选择属性,而应选择符合计算机名称的元素:

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);    
}
List machines=document.selectNodes(String.format(“//machine[@name='%s']”,machine\u name);
用于(元件机器:机器){
Element credPairs=(Element)iter.next();
credPair元素=credPair.addElement(“cred对”);
元素登录名=credPair.addElement(“登录名”);
login.setText(loginId);
元素密码=credPair.addElement(“密码”);
password.setText(pass);
机加件(credPairs);
}

未经测试,但应该可以工作(或向您指示方向)

在缩进后,我发现您的xml格式不正确。在
之前有一个
打开标记,在该位置是非法的。可能是复制/粘贴错误

找到正确的机器名属性后,选择所有机器节点并将凭据添加到每个机器节点。相反,不应选择属性,而应选择符合机器名的元素:

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);    
}
List machines=document.selectNodes(String.format(“//machine[@name='%s']”,machine\u name);
用于(元件机器:机器){
Element credPairs=(Element)iter.next();
credPair元素=credPair.addElement(“cred对”);
元素登录名=credPair.addElement(“登录名”);
login.setText(loginId);
元素密码=credPair.addElement(“密码”);
password.setText(pass);
机加件(credPairs);
}

未经测试但应该有效(或为您指明方向)

非常感谢您救了我一天Andreas\u D非常感谢您救了我一天Andreas\u D