【问题标题】:How to write Python or PHP script to edit this XML file?如何编写 Python 或 PHP 脚本来编辑这个 XML 文件?
【发布时间】:2011-06-14 05:56:54
【问题描述】:

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

  • 找到标签“预加载”删除整个 标签,找到“预加载=?sometext?”并删除。
  • 找到标签“jumpable”删除整个 标签,找到“jumpable=?sometext?”并删除。
  • 找到“tween”并删除整个标签
  • 将“幻灯片”替换为“标题”,删除此行
  • 找到“offsety”并删除整个 标记
  • 找到“offsetx”并删除整个 标记
  • 找到“titleoffsetx”并删除 整个标签
  • 找到“presenter”并删除整个 标记
  • 找到“控件”并删除整个 标记
  • 找到“demooffsetx”和“demooffsety” 并删除整个标签。
  • 将“flv”替换为“src”,除非是“.flv”
  • 删除类型标签,例如。 “type=?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>

【问题讨论】:

  • 我没有看到你的“之前”部分。
  • 你试过了吗?你到底是在哪里卡住的?
  • Stephen Chu,我刚刚编辑了问题以显示“之前”部分。
  • 他们为什么要这么辛苦,难道不能有人给我一个例子来告诉我该怎么做,剩下的我来做吗?使用初学者编程技能开始执行此操作的最简单方法是什么。

标签: php python xml scripting


【解决方案1】:
#!/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脚本应该会输出你想要的。

【讨论】:

  • @Josh - 我不会像这个答案所示推荐正则表达式。如果我需要这样做,我会使用 XSLT。但是,如果我要使用 Python,我会使用 ElementTree。
  • @DevNull - 你怎么不推荐这种方式?
  • 风险太大。如果在元素名称以外的地方使用“幻灯片”这个词会发生什么?或者,如果属性的顺序与您期望的不完全一致?
  • 啊,我明白了。我对 Python 有点陌生。您将如何使用 ElementTree 来做到这一点?
  • 我显然不再需要这个脚本,但感谢您的帮助。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 不,最简单的方法是什么?
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2022-12-15
      • 2016-08-10
      • 1970-01-01
      • 2013-01-22
      • 2015-10-21
      • 2023-04-03
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多