Windows脚本重新排序和替换XML文件中的文本?



我发现了几个类似的问题,但没有一个完全达到我的目标,我绑定在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 -->

我什至不确定什么最有效?这可以用蟒蛇完成吗?批?

蒂亚

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">24<!-- 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,因此使用了Python 3。

这是使用正则表达式来修改 XML。 如果 XML 具有合理的常量结构,如发布的示例, 那么这可能符合您的目标。

读取test1.xml并使用 带有re.sub()的正则表达式模式。

test2.xml是应用了更改的 XML 文件。

这两个文件都被视为utf-8

阅读有关re模块的 Python 帮助文件。

所用正则表达式的简要概述。

  • ^匹配行的开头。
  • s匹配空格字符。
  • *匹配 0 个或多个以前的模式|字符。
  • +匹配 1 个或多个以前的模式|字符。
  • (.*?)捕捉任何角色作为一个不贪婪的群体。
  • 1是第一组作为替补。2是第二组...
  • re.I是不敏感的标志。
  • re.M是多行标志,因此可以使用行锚点^$

建议您阅读 Python 帮助文件,因为它更多 全面的学习。

最新更新