【问题标题】:A script that uses data from another file to edit an xml file使用来自另一个文件的数据来编辑 xml 文件的脚本
【发布时间】:2012-04-22 09:41:53
【问题描述】:

我对脚本非常缺乏经验,所以我真的需要你的帮助。 我有一个 xml 文件,其中每一行都有这个:

<![CDATA[<head>Wallpaper</head><body>1328758083110.jpg</body>]]></photo>

我希望能够编辑头部标签之间的每个“壁纸”部分,而不是说从文本文件中提取的内容,其中每个元素由换行符分隔。

这是一个相当广泛的问题,所以我很感激任何意见。我应该从哪里开始?

【问题讨论】:

  • 为什么 CDATA 部分中有标记?
  • 没关系,我只是想通了:“命名空间太难了!”

标签: python xml perl scripting


【解决方案1】:

如果我正确理解您的问题,这个 python sn-p 应该可以工作...我假设您的文本文件中的行数与您要在 XML 文件中编辑的行数相同,并且字符串“壁纸”不在您不想编辑的任何行中。否则你可能需要一些不同的东西:

inFile = open('mytextfile.txt','r')

myTextData = []
for line in inFile:
    myTextData.append(line.strip())
inFile.close()

inFile = open('myXMLfile.xml','r')
outFile = open('myFinishedXMLfile.xml','w')
currentItem = 0
for line in inFile:
    if 'Wallpaper' not in line:
        outFile.write(line)
    else:
        left = line.find('Wallpaper')
        right = left + 9    # Wallpaper is 9 characters
        outFile.write(line[:left])
        outFile.write(myTextData[currentItem])
        outFile.write(line[right:])
        currentItem += 1
inFile.close()
outFile.close()

【讨论】:

  • 非常感谢您的意见。这个脚本几乎可以工作,但它似乎只能从 mytextfile.txt 的第 1 行读取。因此,它为每个“壁纸”实例插入相同的文本字符串来代替“壁纸”,而不是向下移动文本文件。
【解决方案2】:
perl -i.bak -lpe'
    BEGIN { open $file, "<", "text-file-with-substitutions"; }
    if (/Wallpaper/) {
        chomp(my $subst = readline $file);
        s/Wallpaper/$subst/
    }
' xml-file-with-cdata

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2018-08-19
    • 2021-01-01
    • 2021-03-13
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多