gpt4 book ai didi

java - 使用 xml 中的 dom4j 在指定位置添加新节点

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:29 24 4
gpt4 key购买 nike

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

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>

最佳答案

缩进后我发现你的 xml 格式不正确。有一个<cred-pairs> </machine>之前的打开标签这在那个地方是非法的。可能是复制/粘贴错误。

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

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

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

关于java - 使用 xml 中的 dom4j 在指定位置添加新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com