Я пытаюсь перебрать файл .xml, который вы видите ниже, и проверить для каждого пользователя (здесь: user1 и user2), совпадает ли значение current-tag со значением total-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
и сравнениядля каждого пользователя значение тега 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));
}
}
}
Проблема этого кода в том, что он генерирует исключение NullPointerException в element.getElementsByTagName(...
.Я уже распечатал значения переменных current
и total
, и они показывали правильные значения, но, как я сравнил его в if(current < total)
, оно всегда было истинным, а не ложным для user1 и для user2 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>