2010-01-20 3 views
2

저는 lxml을 사용하여 rss 피드 XML을 작성했습니다. 하지만 태그에 문제가있어 동적 인 요소를 추가하는 방법을 알지 못합니다. lxml이 함수의 매개 변수로 함수를 가진 것처럼 보이기 때문에 전체 페이지를 다시 작성하지 않고도 동적 항목 수를 반복하는 방법을 파악할 수 없습니다.lxml 및 루프를 사용하여 xml rss를 파이썬으로 만듭니다.

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"), 
      ), 
     ) 
    ) 
    ) 

답변

2
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) 
4

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 요소에 항목을 더 추가하십시오.

5

제이슨이 귀하의 질문에 답변했습니다. 하지만 - 단지 FYI - 함수 인수를 목록으로 동적으로 전달할 수 있습니다. E.channel(*args), 여기서 args[E.title( ... ), E.link( ... ), ... ]입니다. 마찬가지로 키워드 인수는 dict와 별 (**)을 사용하여 전달할 수 있습니다. documentation을 참조하십시오.

관련 문제