Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:在xml中添加新数据超过了现有数据_Python_Xml_Python 2.7_Lxml - Fatal编程技术网

python:在xml中添加新数据超过了现有数据

python:在xml中添加新数据超过了现有数据,python,xml,python-2.7,lxml,Python,Xml,Python 2.7,Lxml,我想将整个标记添加到xml中,下面是我的xml格式 <?xml version="1.0" encoding="UTF-8"?> <ca st="true" name="XMLConfig"> <app> <!--- I want to add entire commneted tag to XML . ! <ar ty="co" name="st"> <ly

我想将整个标记添加到xml中,下面是我的xml格式

<?xml version="1.0" encoding="UTF-8"?>
<ca st="true" name="XMLConfig">
    <app>
        <!---   I want to add entire commneted tag to XML . ! 
        <ar ty="co" name="st">    
            <ly ty="pt">
                 <pt>value</pt>
            </Layout>
        </ar>                    -->

        <roll name="roll" fN="file.log" fP="logs.gz">
            <ly type="ptl">
                 <pt>value</pt>
            </ly>
            <po>
    <!--            Comment /> -->
                <si size="100 MB" />
        <!--        Comment /> -->
            </po>
            <de fI="max" max="10"/>   
        </roll>       
    </app>

价值
如上面的文件所示,我想在文件中添加这个标签

    <ar ty="co" name="st">    
        <ly ty="pt">
             <pt>value</pt>
        </Layout>
    </ar>

价值
到目前为止,我就是在这里到达的

for appenders in tree.xpath('//Appenders'):
    if appenders.getchildren():
        appenders.remove(appenders.getchildren()[0])
        appenders.insert(0, appenders.getparent().append(etree.fromstring('<ar ty="co" name="st"> <ly ty="pt"><pt>value</pt></Layout></ar>')))
用于tree.xpath('//appenders')中的appender:
如果appenders.getchildren():
appenders.remove(appenders.getchildren()[0])
insert(0,appenders.getparent().append(etree.fromstring('value'))
这将删除新内容之后的所有其他内容。 任何帮助都将不胜感激

我让它工作了

for apps in tree.xpath('//app'):  
    if appenders.tag == 'app':
        appenders.insert(0, etree.SubElement(appenders, 'ar', ty="Co", name="st"))
        for appender in tree.xpath('//ar'):
            appender.insert(0, etree.SubElement(appender, 'ly', ty="pt"))
            for layout in tree.xpath('//ly'):
                layout.insert(0, etree.SubElement(layout, 'pt'))
                for pattern in tree.xpath('//pt'):
                    pattern.text = 'value'


tree.write(r'C:\value.xml', xml_declaration=True, encoding='UTF-8')  

如果有人有更好的方法。。请让我知道这一点,以便我能改进这一点

在我看来,你做这件事的第一种方式要好得多。您刚刚在
insert
行中犯了一些错误,应该是这样的:

appenders.insert(0, etree.fromstring('<ar ty="co" name="st"> <ly ty="pt"><pt>value</pt></ly></ar>')))
我还注意到你在所有问题中都做了一些事情:

  • 您省略了xml文件中的一些行。(我是说为什么?)
  • 在xml中缩短标记名,但在代码中保留其长版本,这有点烦人,因为想要回答您的人必须再次更改代码以查看它是否工作

  • 同意,我回去检查了一下。第一种方法是按它应该的方式工作。谢谢你的回复,!第一:因为xml文件有200多行。。我认为所有这些细节都是不必要的。第二条:从现在起我会处理好的!是的,我做的第一个方法是给我appender.insert(0,None)并抛出异常。但我发誓它以前对我有用(在新内容之后删除所有其他内容)。我想我在发布代码时弄糟了一些事情(我根本不应该对变量进行更改)
    appenders.insert(0,None)