2014-10-19 76 views
1

我试图更新的iTunes播客XML,需要把第一项目标签上面的信息LXML。我已经尝试使用minidom和lxml.etree,但似乎无法深入到足以开始插入我需要的地方。这里是XML和我最近尝试过的代码,因为lxml将子节点转换为列表,所以出错。插入孙子节点间使用Python

<?xml version='1.0' encoding='UTF-8'?> 
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> 
    <channel> 
    <title>Title</title> 
    <link>weblink</link> 
    <language>en-us</language> 
    <copyright>Copyright</copyright> 
    <itunes:subtitle>Subtitle</itunes:subtitle> 
    <itunes:author>Author</itunes:author> 
    <itunes:summary>Summary</itunes:summary> 
    <description>Description</description> 
    <itunes:owner> 
     <itunes:name>Owner Name</itunes:name> 
     <itunes:email>Owner email</itunes:email> 
    </itunes:owner> 
    <itunes:image image.jpg"/> 
    <itunes:category text="MISC"> 
     <itunes:category text="MISC"/> 
     </itunes:category> 
    <itunes:block>no</itunes:block> 
    <itunes:explicit>no</itunes:explicit> 

    <item> 
     <title>First Entry</title> 
     <itunes:author>Author</itunes:author> 
     <itunes:subtitle>Just Another Entry</itunes:subtitle> 
     <itunes:summary>Podcast Summary.</itunes:summary> 
     <enclosure url="url_to_mp3" length="48412967" type="audio/mpeg"/> 
     <guid>url_to_mp3</guid> 
     <pubDate>Sun, 12 Oct 2014 12:00:00 -0500</pubDate> 
     <itunes:duration>00:50:26</itunes:duration> 
     <itunes:block>no</itunes:block> 
     <itunes:explicit>no</itunes:explicit> 
    </item> 

我当前的代码:

from lxml import etree 

tree = etree.parse(file) 
root = tree.getroot() 
child = root.getchildren() 
child.insert(13, etree.Element('item')) 
child[13].insert(0, etree.SubElement(child[13], 'title')) 

感谢您的帮助,您可以提供。

回答

0

这是我想出的答案。

from lxml import etree 
parser = etree.XMLParser(remove_blank_text=True) 
tree = etree.parse('file', parser) 
root = tree.getroot() 
child = root.find('channel') 
new_item = etree.Element('item') 
new_title = etree.SubElement(new_item, 'title') 
new_title.text = "Test Title" 
child.insert(13, new_item) 
tree.write('file', pretty_print=True, xml_declaration=True, encoding='UTF-8')