2011-10-20 15 views
0

私はXMLとコードを持っています。しかし、私はその部分をどうやって行うのか分かりません。入力をxml属性と一致させるPython

XML:

<settings> 
<plugin id="1" name="Send Mail" execute="func/sendmail.py"> 
    <param name="towhere" value="To Where?" /> 
    <param name="mailsub" value="Mail Subject" /> 
    <param name="mailcont" value="Mail Content" /> 
    <param name="senderid" value="[email protected]" /> 
    <param name="senderpw" value="xxxx" /> 
</plugin> 
<plugin id="2" name="Open Tar" execute="func/taropen.py"> 
    <param name="tarname" value="Tar file name" /> 
    <param name="tarloc" value="Tar location" /> 
    <param name="tardest" value="Tar destination" /> 
</plugin> 
<plugin id="3" name="Server Reboot" execute="func/reboot.py"> 
    <param name="rebootafter" value="1" /> 
</plugin> 
</settings> 

コード:

from xml.dom import minidom 
yXML = minidom.parse('data/config.xml') 

for plugin in yXML.getElementsByTagName('plugin'): 
    print plugin.getAttribute('id')+"- "+plugin.getAttribute('name') 

selection = raw_input("Enter your choice: ") 
selection = plugin.getAttribute('id') 
if selection: 
    import os 
    exe = plugin.getAttribute('execute') 
    os.system('python '+exe) 

私は、入力として1または2を入力し、それが数3.あなたが助けてもらえ開きますか?

出力:

ubuntu:~/Desktop$ python test.py 
1- Send Mail 
2- Open Tar 
3- Server Reboot 
Enter your choice: 1 
python: can't open file 'func/reboot.py': [Errno 2] No such file or directory 
ubuntu:~/Desktop$ 

それが解決するにはあまりにも簡単だが、私は非常によく考えることはできません。

ありがとうございます!

+0

BeautifulSoup for Pythonを使用すると、HTMLとXMLの両方を解析できます。構文解析時に 'text =" text "'を指定して検索するテキストを指定することができます。 – Griffin

答えて

2

値を出力するループがforの場合、pluginは3番目のオブジェクト(id3)と等しくなります。したがって、その時点以降のpluginの使用は、常にサーバーの再起動オプションを参照します。

[...] 
selection = raw_input("Enter your choice: ") 
plugin = yXML.getElementsByTagName('plugin')[int(selection)] 
if selection: 
    [...] 
+0

もっとクリーンなのは、既に質問で行われているように要素をループして、 'id'属性の値をチェックすることです。そうすれば、アイテムの順序が異なる場合でも、正しいエントリが得られます。 – jro

+0

のubuntu:2 トレースバック(最後の最新の呼び出し):: ファイル "test.py"、行10〜/デスクトップPythonのtest.py の1-メール送信 2 - タールオープン 、3-サーバーの再起動 はあなたの選択を入力します。 、 プラグイン= yXML.getElementsByTagName( 'プラグイン')で、[選択] はTypeError:〜/デスクトップ$ が新しい出力されます。リストのインデックスは のUbuntuをstrない、整数でなければなりません。 – nightrider84

+0

ダーン...私は何をすべきかわかりません。私は間違ったことをしましたか? – nightrider84

関連する問題