修改现有的xml文件

时间:2014-05-11 10:20:22

标签: python 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>

我的问题是:如何读取此类文件然后添加信息。例如,如果该人具有专业&#34;教授&#34;,(写在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 个答案:

答案 0 :(得分:0)

您可以使用simple来加载xml文件,然后您可以执行任何操作,例如修改节点值,删除节点,创建节点 在你的情况下,让我们说你有一个现有的文件&#34; person.xml&#34;并且它的网址是例如 &#34;个XML / person.xml&#34; 在php文件中写下面的代码,让我们说&#34; person.php&#34;

//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");

你可以修改你想要的任何位置