2014-05-11 94 views
0

我需要修改現有的xml文件。實際的文件看起來是這樣的:修改現有的xml文件

<person id="1"> 
    <address>Fr.</address> 
    <titles/> 
    <firstname>Mary</firstname> 
    <lastname>Müller</lastname> 
    <gender>F</gender> 
    <profession/> 
    <references> 
     <reference> 
      <positions> 
       <position>68-590-1</position> 
       <position>68-590-2</position> 
      </positions> 
      <positions> 
       <position>68-590-6</position> 
       <position>68-590-7</position> 
      </positions> 
     </reference> 
    </references> 
</person> 

我的問題是:我怎麼能在這樣的文件讀取,然後添加信息。舉例來說,如果這個人有行業「教授」,(這是在12-122-3位置寫的),修改後的XML應該是這樣的:

<person id="1"> 
    <address>Fr.</address> 
    <titles/> 
    <firstname>Mary</firstname> 
    <lastname>Müller</lastname> 
    <gender>F</gender> 
    <profession>professor</profession> 
    <references> 
     <reference> 
      <positions> 
       <position>12-122-3</position> 
      </positions> 
      <positions> 
       <position>68-590-1</position> 
       <position>68-590-2</position> 
      </positions> 
      <positions> 
       <position>68-590-6</position> 
       <position>68-590-7</position> 
      </positions> 
     </reference> 
    </references> 
</person> 

感謝任何幫助! :)

什麼我迄今所做的:

from xml.dom import minidom 

doc = minidom.parse('SAC-Jahrbuch_1895_mul-ner.xml') 
person = doc.getElementsByTagName('person') 
lastnames = doc.getElementsByTagName('lastname') 
positions = doc.getElementsByTagName('position') 
professions = doc.getElementsByTagName('profession') 
for ln in lastnames: 
     for pos in positions: 
       if ln.firstChild.nodeValue == u"Müller" and pos.firstChild.nodeValue == "68-590-2": 
        print "right person" 

現在,我怎麼能檢查的人已經一個職業?如果不是的話:我該如何添加專業和職位? 非常感謝!

+1

你有什麼迄今所做?您是否嘗試在Python教程中遵循至少一個XML? –

+1

我用minidom試了一下。但它沒有奏效。我會再試一次...... – MarkF6

+0

從長遠來看,您可能會想要使用['lxml'](http://lxml.de/)。你可以按照教程[這裏](http://lxml.de/tutorial.html)。 – Midnighter

回答

0

你可以使用簡單的加載xml文件,然後你可以做任何修改節點值,刪除節點,創建節點 你的情況,讓我們說你有一個現有的文件「person.xml」,它的網址是例如 「個XML/person.xml」 寫一個PHP文件下面的代碼讓我們說「person.php」

//so let us begin with loading "person.xml" 
$root = simplexml_load_file("xmls/person.xml"); 
$person = $root->xpath("/person[profession='professor']"); 
for($i = 0; $i < count($person); $i++) 
{ 
    //i will modify just the first position and you can do this for the other 
    $person[$i]->references->reference->positions[0]->position[0]="12-122-3"; 
} 

$root->asXml("xmls/person.xml"); 

,你可以修改任何位置,你想

+0

非常感謝!這在python中看起來如何?我不應該使用php ... – MarkF6

+0

我真的很抱歉,我不知道如何在python中執行此操作 – MCHAppy