使用ElementT从众多属性中选择一个

2024-04-19 20:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,这个问题不是重复的,因为我已经找了好几天的解决办法,根本无法确定问题的答案。我试图使用Python从XML文档标记打印一个嵌套属性。我相信我遇到的错误与我试图从中获取信息的标签有多个属性有关。有什么方法可以指定我想要“第二个标签”中的“状态”值吗??非常感谢你的帮助。在

我的XML文档'测试.xml':

<?xml version="1.0" encoding="UTF-8"?>
<first-tag xmlns="http://somewebsite.com/" date-produced="20130703" lang="en" produced-   by="steve" status="OFFLINE">
    <second-tag country="US" id="3651653" lang="en" status="ONLINE">
    </second-tag>
</first-tag>

我的Python文件:

^{pr2}$

错误:

AttributeError: 'NoneType' object has no attribute 'get'

Tags: 答案文档lang属性tagstatus错误标签
3条回答

我不知道elementtree,但我会用ehp或easyhtmlparser这样做 这是链接。 http://easyhtmlparser.sourceforge.net/ 一个朋友告诉我这个工具,我还在学习那是相当好和简单。在

from ehp import *

data = '''<?xml version="1.0" encoding="UTF-8"?>
<first-tag xmlns="http://somewebsite.com/" date-produced="20130703" lang="en" produced-   by="steve" status="OFFLINE">
    <second-tag country="US" id="3651653" lang="en" status="ONLINE">
    </second-tag>
</first-tag>'''

html  = Html()
dom   = html.feed(data)
item = dom.fst('second-tag')
value = item.attr['status']
print value

这里的问题是这里没有名为second-tag的标记。有一个名为{http://somewebsite.com/}second-tag的标记。在

你可以很容易地看到:

>>> print(root.getchildren())
[<Element '{http://somewebsite.com/}second-tag' at 0x105b24190>]

不兼容名称空间的XML解析器可能会做错事而忽略它,从而使代码正常工作。实际上,当您请求second-tag时,一个向后弯曲以友好(如BeautifulSoup)的解析器将自动尝试{http://somewebsite.com/}second-tag。但是ElementTree两者都不是。在

如果这还不是您需要了解的全部内容,那么您首先需要阅读关于名称空间的教程(可能是this one)。在

您在.find('second-tag')失败,而不是在.get上。在

为了你想要的,和你的习惯用语,beauthulsoup闪耀着光芒。在

from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(xml_string)
whatyouwant = soup.find('second-tag')['status']

相关问题 更多 >