https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/NodeSet
Предоставляет вам список всех действий, которые вы можете выполнить над этим набором узлов.Вопрос в том, хотите ли вы полностью изменить все в нем?Это будет включать все узлы, вложенные в него.Просто проверяя, вы получаете только один результат, потому что поиск позволяет найти несколько узлов и поместить их в набор узлов для просмотра.
Если вы уверены, что находитесь там, где хотели бы быть, и хотите полностью изменить/ удалить набор узлов, который вы бы
xml.search("//xmlns:g[@id='Placements']").before('<g id=example></g>')
Затем удалите выбранный вами набор:
xml.search("//xmlns:g[@id='Placements']").delete
Что меня беспокоит, так это то, что вы получаете набор узлов, который подразумевает, что у вас более одноготег.Попробуйте сделать:
xml.search("//xmlns:g[@id='Placements']").length
Чтобы убедиться, что у вас есть нужный тег единственного числа.Выполнение:
i = 0
xml.search("//xmlns:g[@id='Placements']").each do |node|
puts node
puts i
i += 1
end
Может дать вам лучшее представление о том, какой именно узел вы хотите.Затем с помощью индекса конкретного узла, который вы хотите, вы можете просто выбрать его с помощью:
xml.search("//xmlns:g[@id='Placements']")[i]
Изменение i для того, какой была конкретная позиция индекса.Проблема, которую я вижу, состоит в том, что вы все еще не находитесь в своем единственном узле, который хотите изменить, поскольку он утверждает, что возвращает вам набор узлов.
Как только вы обнаружите, что заменяющий узел в единственном числе должен работать: https://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Node