【问题标题】:lxml and loops to create xml rss in pythonlxml 和循环在 python 中创建 xml rss
【发布时间】:2010-01-20 20:36:34
【问题描述】:

我一直在使用 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"),
            ),
        )
      )
    )

【问题讨论】:

    标签: python lxml


    【解决方案1】:

    杰森已经回答了你的问题;但是——仅供参考——您可以将任意数量的函数参数作为列表动态传递:E.channel(*args),其中args 将是[E.title(...), E.link(...),...]。类似地,可以使用 dict 和两颗星 (**) 传递关键字参数。见documentation

    【讨论】:

      【解决方案2】:

      This lxml tutorial 说:


      要创建子元素并将它们添加到父元素,可以使用append() 方法:

      >>> root.append( etree.Element("child1") )
      

      但是,这很常见,因此有一种更短且更有效的方法:SubElement 工厂。它接受与Element 工厂相同的参数,但还需要父级作为第一个参数:

      >>> child2 = etree.SubElement(root, "child2")
      >>> child3 = etree.SubElement(root, "child3")
      

      所以您应该能够创建文档,然后说channel = rss.find("channel") 并使用上述任一方法向channel 元素添加更多项目。

      【讨论】:

        【解决方案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)
        

        【讨论】:

          猜你喜欢
          • 2013-12-02
          • 1970-01-01
          • 1970-01-01
          • 2020-09-16
          • 1970-01-01
          • 2013-07-21
          • 2016-10-17
          • 1970-01-01
          • 2012-12-26
          相关资源
          最近更新 更多