Ты очень близко. Прежде всего, позвольте мне сказать, что есть много способов решить эту проблему. Вот один из них:
вы можете передать объект player
в monsterFight(Player player)
public class Player {
private int health;
private int lvl;
public Player(int health, int lvl) {
this.health = health;
this.lvl = lvl;
}
...
// getters & setters
}
, а затем в monsterFight(Player player)
вы можете вызвать player.setHealth(health)
всякий раз, когда игрок теряет здоровье. !
Это - часто фиксировавшая ошибка. Никогда не используйте XPath"! =" оператор, когда один или оба из операндов набор (наборы) узлов.
value != node-set
по определению верно, если там существует узел n в наборе узлов, таком что
value
не равно string(n)
То, что Вы хотите, является этим
value
не равно никакому узлу в наборе узлов.
Это может быть выражено следующим образом:
value = node-set
верно, если там существует по крайней мере один узел n в наборе узлов, таком что:
value = string(n)
Затем
not(value = node-set)
верно, если там не существует никакой узел n в наборе узлов, таком что
value = string(n)
Поэтому следующее выражение XPath выберет желаемые узлы:
/*/*/describes[not(. = ../../*/physical/distribution/@id) and not(. = ../../*/implementation/distribution/@id)]
Я лично предпочел бы иметь всего одно сравнение узла контекста к объединению этих двух наборов узлов:
/*/*/describes [not(. = (../../*/physical/distribution/@id | ../../*/implementation/distribution/@id ) ) ]
Действительно обратите внимание, что я избегаю использования "//" сокращение. Это обычно очень дорого (неэффективный) и должно использоваться, только если мы не знаем структуру XML-документа.
И, конечно, вышеупомянутые выражения XPath должны быть eavaluated против следующего XML-документа (второй, обеспеченный в вопросе):
<eml> <datatable> <physical> <distribution id="100"/> </physical> </datatable> <datatable> <physical> <distribution id="300"/> </physical> </datatable> <software> <implementation> <distribution id="200"/> </implementation> </software> <additionalMetadata> <describes>100</describes> <describes>200</describes> <describes>300</describes> <describes>400</describes> </additionalMetadata> </eml>