Первое, что вам нужно сделать, это убедиться, что ваш XML-файл правильно отформатирован для lxml. Если весь документ не содержится в общем теге «тело», анализатор lxml завершится с ошибкой. Могу ли я сделать это предложение:
<?xml version="1.0"?>
<body>
<a>
<b>Text I need</b>
</a>
<a>
<b>Text I need2</b>
</a>
</body>
Обращаем внимание на этот файл как на "foo.xml". Теперь, когда этот формат данных лучше для синтаксического анализа, импорт etree из библиотеки LXML:
from lxml import etree as et
Теперь настало время, чтобы разобрать данные и создать корневой объект, с которого начинается:
file_name = r"C:\foo.xml"
xmlParse = et.parse(file_name) #Parse the xml file
root = xmlParse.getroot() #Get the root
После объявлен корневой объект, теперь мы можем использовать метод getiterator() для итерации всех тегов b. Поскольку метод getiterator() - это именно то, что он напоминает, итератор, мы можем использовать понимание списка для сохранения объектов элемента в списке. Оттуда мы можем изменить текст между тегами Ъ:
bTags = [tag for tag in root.getiterator("b")] #List comprehension with the iterator
bTags[0].text = "Change b tag 1." #Change tag from "Text I need"
bTags[1].text = "Change b tag 2." #Change tag from "Text I need2"
xmlParse.write(file_name) #Edit original xml file
Конечный результат должен выглядеть примерно так:
<?xml version="1.0"?>
<body>
<a>
<b>Change b tag 1.</b>
</a>
<a>
<b>Change b tag 2.</b>
</a>
</body>
Что значит «не будет работать» означает? Получаете ли вы ошибку или пустой результат? – ErlVolton
Вы читали документацию 'lxml'? Зачем использовать парсер HTML, если у вас есть XML, в любом случае? –
да, я получаю пустую строку. Я не понял документацию для части xml. Это было странно. – Dancia