gpt4 book ai didi

java - 如何在满足一定条件的情况下迭代节点列表并替换内容?

转载 作者:行者123 更新时间:2023-11-30 05:40:22 25 4
gpt4 key购买 nike

我尝试迭代 .xml 文件(您可以在下面看到)并检查每个用户(此处:user1 和 user2),当前标签的值是否与总标签的值相同,并且如果不,请在 current-tag 的值上添加一定的值(例如+10)。

<config>
<users>
<user1>
<name>test1</name>
<stats>
<total>50</total>
<current>50</current>
</stats>
</user1>
<user2>
<name>test2</name>
<stats>
<total>50</total>
<current>20</current>
</stats>
</user2>
</users>
</config>

我使用以下代码来迭代 stats 的子节点-tag 并为每个用户比较 current 的值- 值为 total 的标签-标签:

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
docBuilder = docFactory.newDocumentBuilder();

Document doc = docBuilder.parse(names_saves);
doc.getDocumentElement().normalize();

NodeList stats = doc.getElementsByTagName("stats");

for(int i = 0; i < stats.getLength(); i++) {
org.w3c.dom.Node n = stats.item(i);
NodeList children= n.getChildNodes();
for ( int x = 0; x < children.getLength(); x++ ) {
Node elem = children.item(x);

int current = 0;
int total = 0;

switch ( elem.getNodeName() ) {
case "current":
current = Integer.parseInt(elem.getTextContent());
break;
case "total":
total = Integer.parseInt(elem.getTextContent());
break;
}

if(current < total) {
Element element = (Element) elem;
element.getElementsByTagName("current").item(0).setTextContent(Integer.toString(current + 10));
}
}
}

此代码的问题是,它在 element.getElementsByTagName(... 处抛出 NullPointerException 。我已经打印出了变量 current 的值和total他们显示了正确的值,但当我在 if(current < total) 进行比较时,它始终为 true,并且对于 user1 和 user2 来说不是 false true。

最后,它应该看起来像这样:

<config>
<users>
<user1>
<name>test1</name>
<stats>
<total>50</total>
<current>50</current> <!-- Is already the same the value of total, don't edit -->
</stats>
</user1>
<user2>
<name>test2</name>
<stats>
<total>50</total>
<current>30</current> <!-- Not the same, add 10 to former value -->
</stats>
</user2>
</users>
</config>

最佳答案

问题在于当前和总计的比较是在填充两个变量的循环内部进行的。因此,仅填充一个变量后即可进行比较。您需要将 if 移到循环之外,并更好地检查两个变量是否确实设置为大于零的值(假设该值不能作为输入)

        int current = 0;
int total = 0;
for ( int x = 0; x < children.getLength(); x++ ) {
Node elem = children.item(x);

switch ( elem.getNodeName() ) {
case "current":
current = Integer.parseInt(elem.getTextContent());
break;
case "total":
total = Integer.parseInt(elem.getTextContent());
break;
}

}
if(current > 0 && total > 0 && current < total) {
Element element = (Element) elem;
element.getElementsByTagName("current").item(0).setTextContent(Integer.toString(current + 10));
}

关于java - 如何在满足一定条件的情况下迭代节点列表并替换内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55772996/

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