如何编写Python或PHP脚本来编辑这个XML文件?

时间:2011-01-24 01:19:11

标签: php python xml scripting

我想写一个编辑多个XML文件的脚本,我想有一个脚本可以执行以下操作;

  • 查找标签“Preload”删除整个 标签,找到“Preload =?sometext?”并删除。
  • 查找标签“jumpable”删除整个 标签,找到“jumpable =?sometext?”并删除。
  • 查找“补间”并删除整个标记
  • 将“slide”替换为“title”,删除此行
  • 找到“offsety”并删除整个 标签
  • 找到“offsetx”并删除整个 标签
  • 找到“titleoffsetx”并删除 整个标签
  • 找到“演示者”并删除整个 标签
  • 找到“控件”并删除整个 标签
  • 查找“demooffsetx”和“demooffsety” 并删除整个标签。
  • 将“flv”替换为“src”,除非是“.flv”
  • 删除类型标记,例如。 “类型=?sometext?”

在剧本之前:

 <?xml version="1.0" encoding="utf-8"?>
    <presentation>
      <lesson>
        <part src="0301p.flv" breadcrumb="This is example text1">
          <cuepoints>
            <cuepoint time="0:01" preload="priority" tooltip="Demo 3.1(A)" jumpable="yes">
              <tween mode="instant" time="1" />
              <slide flv="demos/0301d1.flv" demooffsetx="-180" demooffsety="60" type="demo"></slide>
              <presenter />
              <controls />
            </cuepoint>
          </cuepoints>
         </part>
       </lesson>
    </presentation>

脚本之后:

<?xml version="1.0" encoding="utf-8"?>
<presentation>
  <lesson>
    <part src="0301p.flv" breadcrumb="This is example text1">
      <cuepoints>
        <cuepoint time="0:01" tooltip="Demo 3.1(A)">
          <title src="demos/0301d1.flv"></title>
        </cuepoint>
      </cuepoints>
     </part>
   </lesson>
</presentation>

4 个答案:

答案 0 :(得分:0)

查看PHP的SimpleXML。 http://www.php.net/manual/en/simplexml.examples-basic.php
当然,这不是你唯一的选择。只需使用Google搜索“PHP XML Parser”或“Python XML Parser”,您就可以获得丰富的资源和库。

答案 1 :(得分:0)

您是否考虑过使用XQuery转换xml数据? XQuery是一种用于xml转换的语言。在我看来,使用XQuery脚本将是解决问题的最佳方法。 XQuery 您只需要一个XQuery引擎来执行您的脚本,该脚本将输入xml转换为输出(如下所示:MXQuery

答案 2 :(得分:0)

我建议使用基于python的解决方案lxml。恕我直言,它是最好的选择,因为它非常丰富的功能允许XPath,etree或objectify,简单的字符串解析和tostring转换等。

PHP根本没有为您提供等效的工具集。

答案 3 :(得分:0)

#!/usr/bin/python

import re

filename = 'editme.txt' #name of the file you want to edit

def edit(filename):
    f = open(filename, 'rU') #reads your file
    text = f.read() #puts everything in file into a string under var text
    f.close() #closes file
    text = re.sub(r'\s[Pp]reload="\w+"', '', text) #delete preload tag
    text = re.sub(r'\s[Jj]umpable="\w+"', '', text) #delete jumpable tag
    text = re.sub(r'<tween.+>\s+', '', text) #delete tween tag
    text = re.sub(r'slide', 'title', text) #replaces slide with title tag
    text = re.sub(r'\s\w+offset\w+=".+"', '', text) #delete offset/type tags
    text = re.sub(r'<presenter.+>\s+', '', text) #deletes presenter tag
    text = re.sub(r'\s+<controls.+>', '', text) #deletes controls tag
    text = re.sub(r'<title flv', '<title src', text) #replaces flv with src in title tag
    f = open(filename, 'w') 
    f.write(text) #replaces all text in file with the edited text
    f.close()

edit(filename)

这个简单的python脚本应该输出你想要的东西。