2011-01-24 16 views
0

私は複数のXMLファイルを編集するスクリプトを書いていますが、私は以下のことをするスクリプトを用意したいと思います。このXMLファイルを編集するPythonまたはPHPスクリプトを書くには?

  • タグを検索する "Preload" タグ全体を削除するには、 "Preload =?sometext?"削除します。
  • タグを見つけて "jumpable" タグ全体を削除し、 "jumpable =?sometext?"削除します。
  • 「offsetx」を見つけ、全体 タグを削除し、「タイトル」と「スライド」を置き換え
  • 検索「offsety」この行を削除し、
  • 全体 タグを削除する「トゥイーン」を見つけ、
  • タグ全体を削除
  • 検索「titleoffsetx」と タグ全体
  • 検索「プレゼンター」を削除し、削除し、「コントロール」を検索し、全体の削除
  • 全体 タグ タグ
  • 「demooffsetx」と「demooffsety」 を見つけ、タグ全体を削除します。
  • "flv"が ".flv"以外の場合は "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> 

:PHPのSimpleXMLを超える

<?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> 
+0

あなたの「前」部分は表示されません。 –

+2

試しましたか?正確にあなたは立ち往生しましたか? –

+0

Stephen Chu、私はちょうど前の部分を示すために質問を編集しました。 – Josh

答えて

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スクリプトは、必要なものを出力する必要があります。

+0

@Josh - この答えが表示されているような正規表現はお勧めしません。これを行う必要がある場合は、XSLTを使用します。しかし、もし私がPythonを使うつもりなら、私はElementTreeを使うでしょう。 –

+0

@DevNull - どうやってこの方法をお勧めしないのですか? – Etcher

+1

あまりにも危険です。 「スライド」という言葉が要素名以外のどこかで使用されるとどうなりますか?または、属性が期待している順序と正確に異なる場合 –

0

ルック。 http://www.php.net/manual/en/simplexml.examples-basic.php
もちろん、あなたの唯一の選択肢ではありません。 「PHP XML Parser」や「Python XML Parser」をグーグルで探すだけで、豊富なリソースとライブラリを利用できます。

+0

私は一見するでしょう。 – Josh

0

xmlデータの変換にXQueryを使用することを検討しましたか? XQueryはXML変換のための言語です。私の意見では、XQueryスクリプトを使用することが、あなたの問題を解決する最良の方法です。私はlxmlでのpythonベースのソリューションをお勧めします

+0

いいえ、これを行う最も簡単な方法は何ですか? – Josh

+0

編集の回答を見る – paweloque

0

:(MXQueryこのような)XQuery は、あなただけの出力に入力されたXMLを変換スクリプトを実行するためのXQueryエンジンを必要とするだろう。 IMHOは、XPath、etreeまたはオブジェクト化、文字列の解析、文字列変換などを可能にする機能が豊富なので、最良の選択肢です。

PHPは同等のツールセットを提供していません。

+0

ええと、Pythonは使いやすいと聞きました。 – Josh

関連する問題