Когда вы ввели в XML-документ еще один уровень, это испортило абсолютное выражение XPath, используемое в исходном решении (таяло точно после исходного XML-файла).
Поэтому, чтобы заставить выражение XPath работать в новой ситуации, просто сделайте следующее:
Замените :
/*/*/variable/attributes/variable_name/@value
с
/*/*/*/variable/attributes/variable_name/@value
и теперь вы снова получите желаемый аккуратный результат:
FRED 2
MORTIMER 1
Я бы никогда не дал вам «независимое» решение, потому что у вас нетпредоставил любые свойства / гарантии / ограничения относительно набора возможных XML-документов, к которым вы хотите применить преобразование.
В исходном вопросе вы использовали:
.//variables/variable/attributes/variable_name
off assessment
,
и именно поэтому я использовал абсолютное выражение XPath в своем решении.Не было никакой гарантии, что в другом XML-документе некоторые элементы variable_name
не будут существовать, так что их цепочка предков не будет variables/variable/attributes
. Если бы это было так, это означало бы, что вы, вероятно, не были заинтересованы в значениях таких«нерегулярные» variable_name
элементы.
Урок заключается в том, что не следует слишком конкретизировать вопрос при определении вопроса, а затем искать общие решения.:)