簡體   English   中英

Python Lxml:將自己的標簽添加到XML文件

[英]Python Lxml: Add own tags to a XML File

將我自己的Elements(標簽)添加到從文件解析的XML樹中時遇到問題。

如果我試圖將一個元素添加到現有樹中,則該文件中的那個元素將無法正確添加,無論我使用new_tag = etree.Subelement(self.root, "new_tag")還是
new_tag = Element("new_tag") self.root.append(new_tag)

self.root.tostring()的返回看起來很棒,添加的元素沒有以正確的方式縮進,例如len(self.root)仍返回與添加元素之前相同的值。

我與lxml.de示例有所不同的唯一一件事是,我將所有這些東西都放入了一個類中……但是那為什么不起作用呢?

希望您能對我有所幫助,因為我搜索該錯誤大約3個小時,但是沒有找到。

里昂

編輯:

這是代碼:

#!/usr/bin/env python3

from lxml import etree

class MyClass(object):
    def __init__(self, xml_filepath = "data.xml"):
        '''
        Constructor
        '''
        self._xml_path = xml_filepath

        with open(self._xml_path) as input_file:
            self.tree = etree.parse(input_file)
        self.xml_tags = self.tree.getroot()[0]

    def read_something(self):


        return [tag.tag for tag in self.tree.iter("child")]

    def change_something(self):
        self.xml_tags[0].tag = "test"

    def add_something(self):
        for elements in self.tree.iter('Home'):        
            child = etree.Element("child")
            child2 = etree.Element("child2")
            elements.insert(1,child)
            child.insert(0, child2)
            child2.text = "23123"

    def to_string(self):
        list_ = list(self.tree.getroot()[0])
        print(list_)
        return(etree.tostring(self.tree, pretty_print=True, xml_declaration=True).decode())

if __name__ == '__main__':
    testClass = MyClass()
    testClass.change_something()
    testClass.add_something()
    print(testClass.to_string())
    print(testClass.read_something())

返回的是:

[<Element test at 0x765e7e68>, <Element child at 0x765e7e90>]
<?xml version='1.0' encoding='ASCII'?>
<root>
  <Home>
    <test>
      <name>Hello world</name>
    </test>
  <child><child2>23123</child2></child></Home>
</root>

['child']

和原始的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <Home>
    <test>      
      <name>Hello world</name>
    </test>    
  </Home>
</root>

您必須直接找到根,然后插入。 您正在看的教程不會解析示例xml文件,而是實際創建根元素和子元素:

import lxml.etree as ET

dom = ET.parse('C:\Path\To\XMLFile.xml')

for elements in dom.iter('root'):        
    child = ET.Element("child")
    elements.insert(1,child)
    child.text = '...'

我自己發現了錯誤。 如果我將自己的解析器添加到parse方法中,則將獲得格式正確的XML輸出,並且內部也可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM