使用lxml和循环在Python中创建XML RSS
我一直在用lxml来创建RSS订阅的XML文件。但是我在处理标签时遇到了问题,搞不清楚怎么添加动态数量的元素。因为lxml似乎只是把函数当作其他函数的参数,所以我不知道怎么在不重做整个页面的情况下,循环添加动态数量的项目。
rss = page = (
E.rss(
E.channel(
E.title("Page Title"),
E.link(""),
E.description(""),
E.item(
E.title("Hello!!!!!!!!!!!!!!!!!!!!! "),
E.link("htt://"),
E.description("this is a"),
),
)
)
)
3 个回答
5
这个lxml教程提到:
要创建子元素并把它们添加到父元素中,你可以使用 append()
方法:
>>> root.append( etree.Element("child1") )
不过,这种做法很常见,所以有一种更简单、更高效的方法:使用 SubElement
工厂。它接受和 Element
工厂一样的参数,但需要把父元素作为第一个参数:
>>> child2 = etree.SubElement(root, "child2")
>>> child3 = etree.SubElement(root, "child3")
所以你应该能够创建文档,然后使用 channel = rss.find("channel")
来找到频道,并用上面提到的任意一种方法来向 channel
元素添加更多的项目。
6
Jason已经回答了你的问题;不过顺便说一下,你可以动态地传递任意数量的函数参数,方法是把它们放在一个列表里,比如说:E.channel(*args)
,这里的args
可以是[E.title(
...), E.link(
...),
...]
。同样,你也可以用字典和两个星号(**
)来传递关键字参数。具体可以参考文档。
3
channel = E.channel(E.title("Page Title"), E.link(""),E.description(""))
for (title, link, description) in container:
try:
mytitle = E.title(title)
mylink = E.link(link)
mydesc = E.description(description)
item = E.item(mytitle, mylink, mydesc)
except ValueError:
print repr(title)
print repr(link)
print repr(description)
raise
channel.append(item)
top = page = E.top(channel)
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。