在Python中,如何引用包含连字符的XML标记
问题描述:
我试图使用BeautifulSoup来解析XML文件。其中一个元素有一个连字符:分配代码在Python中,如何引用包含连字符的XML标记
如何访问它?我试过了:
soup.distribution-code
soup."distribution-code" (tried single quotes too)
soup.[distribution-code]
但这些都没有工作。
答
可以使用常规的Python语法访问由属性引用非连元素,即obj.name
,然而,-
是没有使用的语法(Python的把它当作“减”运算符)时一个有效的字符,因此你不能通过该方法访问这些元素。
相反,使用soup.find()
或soup.find_all()
:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<thing><id>1234</id><distribution-code>555444333</distribution-code></thing>')
>>> soup.thing
<thing><id>1234</id><distribution-code>555444333</distribution-code></thing>
>>> soup.id
<id>1234</id>
>>> soup.distribution-code
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'code' is not defined
>>> soup.find('distribution-code')
<distribution-code>555444333</distribution-code>
或者,如chepner's comment指出的那样,你可以使用getattr()
和setattr()
获取和设置包含连字符的属性。我认为soup.find()
是访问这些元素的更常用的方法。
您是否尝试过'汤['distribution-code']'? –
我想你真的需要[this](http://www.crummy.com/software/BeautifulSoup/bs4/doc/)。 –
这给了我这个错误:“回溯(最近通话最后一个): 文件‘’,1号线,在 汤[”分配码'] 文件“/usr/lib/python2.7/dist- packages/bs4/element.py“,第834行,在__getitem' –
WebUserLearner