How can I access namespaced XML elements using BeautifulSoup?

后端 未结 3 959
清酒与你
清酒与你 2020-12-07 01:30

I have an XML document which reads like this:



4000
0
<         


        
3条回答
  •  被撕碎了的回忆
    2020-12-07 01:42

    BeautifulSoup isn't a DOM library per se (it doesn't implement the DOM APIs). To make matters more complicated, you're using namespaces in that xml fragment. To parse that specific piece of XML, you'd use BeautifulSoup as follows:

    from BeautifulSoup import BeautifulSoup
    
    xml = """
      
        4000
        0
      
    """
    
    doc = BeautifulSoup( xml )
    print doc.find( 'web:total' ).string
    print doc.find( 'web:offset' ).string
    

    If you weren't using namespaces, the code could look like this:

    from BeautifulSoup import BeautifulSoup
    
    xml = """
      
        4000
        0
      
    """
    
    doc = BeautifulSoup( xml )
    print doc.xml.web.total.string
    print doc.xml.web.offset.string
    

    The key here is that BeautifulSoup doesn't know (or care) anything about namespaces. Thus web:Web is treated like a web:web tag instead of as a Web tag belonging to th eweb namespace. While BeautifulSoup adds web:web to the xml element dictionary, python syntax doesn't recognize web:web as a single identifier.

    You can learn more about it by reading the documentation.

提交回复
热议问题