2024-10-01 07:43:47 发布
网友
我有一个XML文档,内容如下:
<xml> <web:Web> <web:Total>4000</web:Total> <web:Offset>0</web:Offset> </web:Web> </xml>
我的问题是如何使用python中的BeautifulSoup这样的库访问它们?
xmlDom.web[“web”].Total?不起作用?
您应该使用xmlns:prefix="URI"语法(see examples here)在根元素上显式定义名称空间,然后从BeautifulSoup通过prefix:tag访问属性。请记住,您还应该明确定义什么,BeautifulSoup应该如何处理您的文档,在这种情况下:
xmlns:prefix="URI"
prefix:tag
xml = BeautifulSoup(xml_content, 'xml')
这是一个老问题,但有些人可能不知道,如果将'xml'作为第二个参数传递给构造函数,那么至少BeautifulSoup 4可以很好地处理名称空间:
'xml'
soup = BeautifulSoup("""<xml> <web:Web> <web:Total>4000</web:Total> <web:Offset>0</web:Offset> </web:Web> </xml>""", 'xml') print soup.prettify() <?xml version="1.0" encoding="utf-8"?> <xml> <Web> <Total> 4000 </Total> <Offset> 0 </Offset> </Web> </xml>
BeautifulSoup本身不是一个DOM库(它没有实现domapi)。为了使事情更复杂,您在xml片段中使用了名称空间。要解析特定的XML片段,可以使用BeautifulSoup,如下所示:
from BeautifulSoup import BeautifulSoup xml = """<xml> <web:Web> <web:Total>4000</web:Total> <web:Offset>0</web:Offset> </web:Web> </xml>""" doc = BeautifulSoup( xml ) print doc.find( 'web:total' ).string print doc.find( 'web:offset' ).string
如果不使用名称空间,代码可能如下所示:
from BeautifulSoup import BeautifulSoup xml = """<xml> <Web> <Total>4000</Total> <Offset>0</Offset> </Web> </xml>""" doc = BeautifulSoup( xml ) print doc.xml.web.total.string print doc.xml.web.offset.string
这里的关键是BeautifulSoup对名称空间一无所知。因此web:Web被视为web:web标记,而不是属于web名称空间的Web标记。虽然BeautifulSoup将web:web添加到xml元素字典中,但python语法无法将web:web识别为单个标识符。
web:Web
web:web
web
Web
您可以通过阅读documentation来了解更多信息。
您应该使用
xmlns:prefix="URI"
语法(see examples here)在根元素上显式定义名称空间,然后从BeautifulSoup通过prefix:tag
访问属性。请记住,您还应该明确定义什么,BeautifulSoup应该如何处理您的文档,在这种情况下:这是一个老问题,但有些人可能不知道,如果将
'xml'
作为第二个参数传递给构造函数,那么至少BeautifulSoup 4可以很好地处理名称空间:BeautifulSoup本身不是一个DOM库(它没有实现domapi)。为了使事情更复杂,您在xml片段中使用了名称空间。要解析特定的XML片段,可以使用BeautifulSoup,如下所示:
如果不使用名称空间,代码可能如下所示:
这里的关键是BeautifulSoup对名称空间一无所知。因此
web:Web
被视为web:web
标记,而不是属于web
名称空间的Web
标记。虽然BeautifulSoup将web:web
添加到xml元素字典中,但python语法无法将web:web
识别为单个标识符。您可以通过阅读documentation来了解更多信息。
相关问题 更多 >
编程相关推荐