Windows скрипт для изменения порядка и замены текста в XML-файле? - PullRequest
0 голосов
/ 21 сентября 2018

Я нашел несколько похожих вопросов, но ни один из них не вполне достиг моей цели, имитируя редактирование нескольких строк в XML-файле.Мои знания сценариев в лучшем случае очень просты, поэтому, пожалуйста, включите некоторые детали, которые мой базовый мозг поймет

Я пытаюсь преобразовать это

    <?xml version="1.0" encoding="UTF-8"?>
  <channels>
    <channel update="i" site="openwebif" site_id="1:0:1:D32E:836:2:11A0000:0:0:0:" xmltv_id="&amp;TV">&amp;TV</channel>
    <channel update="i" site="openwebif" site_id="1:0:1:2F17:7EF:2:11A0000:0:0:0:" xmltv_id="4Music">4Music</channel>
    <channel update="i" site="openwebif" site_id="1:0:1:5302:814:2:11A0000:0:0:0:" xmltv_id="4seven">4seven</channel>

в это

    <?xml version="1.0" encoding="UTF-8"?>
  <channels>
<!-- vermin --><channel id="&amp;TV">1:0:1:D32E:836:2:11A0000:0:0:0:</channel><!-- VM -->
<!-- vermin --><channel id="4Music">1:0:1:2F17:7EF:2:11A0000:0:0:0:</channel><!-- VM -->
<!-- vermin --><channel id="4seven">1:0:1:5302:814:2:11A0000:0:0:0:</channel><!-- VM -->

Я даже не уверен, что будет работать лучше?Можно ли это сделать с помощью Python?партия?

TIA

1 Ответ

0 голосов
/ 21 сентября 2018
import re

# Open the xml file.
with open('test1.xml', encoding='utf-8') as r:

    # Read the file contents whole.
    content = r.read()

    # Do replacements using regex.
    content = re.sub(r'^\s*(<channel)\s+.*?\s+site_id="(.*?)"\s+xmltv_id="(.*?)">.*?(</channel>)',
                     r'<!-- vermin -->\1 id="\3">\2\4<!-- VM -->', content, 0, re.I + re.M)

    # Open and write the changed xml file.
    with open('test2.xml', 'w', encoding='utf-8') as w:
        w.write(content)

Python 3 используется, так как вы упомянули Python в кратком изложении своего вопроса.

Это использует регулярные выражения для изменения XML.Если XML имеет разумную структуру констант, как в приведенном примере, это может соответствовать вашей цели.

test1.xml считывается, и изменения выполняются с использованием шаблона регулярного выражения с re.sub().

test2.xml - это файл XML с внесенными изменениями.

Оба файла обрабатываются как utf-8.

Прочитайте файл справки Python о re*Модуль 1018 *.

Краткий обзор используемых регулярных выражений.

  • ^ соответствует началу строки.
  • \s соответствует пробельным символам.
  • * соответствует 0 или более предыдущему шаблону | символа.
  • + соответствует 1 или более предыдущему шаблону | символа.
  • (.*?) захватывает любой символ в качестве группыне жадный.
  • \1 1-я группа в качестве замены.\2 - 2-я группа ...
  • re.I - флаг нечувствительности.
  • re.M - многострочный флаг, поэтому можно использовать линейные якоря ^ и $.

Предлагаем прочитать справочный файл Python, так как он более полон для изучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...