найдите одну строку в XML-файле и замените следующую строку другим содержимым, используя python - PullRequest
0 голосов
/ 05 февраля 2019

Используя python, мне нужно заменить строку в XML-файле, когда приведенная выше строка соответствует.

    <groupId>test</groupId>
    <artifactId>dmrfolder</artifactId>
    <version>1.0</version>

здесь я хочу найти dmrfolder, если он найден, тогда мне нужно заменить ниже 1.0 с somevalue.

Я пошел по следующему пути, но у меня это не сработало.

with open('test.xml', 'r') as file :
            data = file.read()
            fnl = data.replace(line[1], str)
            with open('test.xml', 'w') as fw:
               fw.write(fnl)
               fw.close()

Ожидаемый результат будет

    <groupId>test</groupId>
    <artifactId>dmrfolder</artifactId>
    <version>somevalue</version>

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Если формат файла данных точно такой же, как опубликованный (включая интервал), вы можете обойтись с помощью .replace():

        fnl = data.replace('''dmrfolder</artifactId>
    <version>1.0''', '''dmrfolder</artifactId>
    <version>somevalue''')

Для переменной или малоизвестнойформат, вы можете использовать re.sub():

        fnl = re.sub('(dmrfolder</artifactId>\s*<version>)1.0', r'\1somevalue', data)
  • \s - любой символ пробела, включая \n
  • \1 -1-я (здесь: единственная) группа в скобках
0 голосов
/ 05 февраля 2019

Вы можете использовать lxml getnext(), чтобы изменить значение непосредственного брата каждого элемента artifactId следующим образом:

import lxml.etree

xml = """
<xml>
  <groupId>test</groupId>
  <artifactId>dmrfolder</artifactId>
  <version>1.0</version>
</xml>
"""

root = lxml.etree.fromstring(xml)
for e in root.findall("artifactId"):
    e.getnext().text = "somevalue"

print(lxml.etree.tostring(root, encoding="unicode"))

Результат:

<xml>
  <groupId>test</groupId>
  <artifactId>dmrfolder</artifactId>
  <version>somevalue</version>
</xml>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...