我正在尝试更新iTunes播客XML,并且需要将信息放在第一个 项 标记之上。我尝试过使用minidom和lxml.etree,但似乎无法向下钻取足够的距离以便开始插入我需要的地方。这是我最近尝试过的XML和代码,由于lxml将子节点转换为列表,因此会出错。
<?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 :(得分: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')