【发布时间】:2020-02-12 10:41:48
【问题描述】:
我正在尝试解析 XML 文件,但对命名空间和标签有点困惑。最后我需要从中获取值
- d:标题
- d:日期
- d:Day
- d:夜晚
- d:Accuweather
- d:Gismeteo
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xml:base="https://portal.erg.kz/weather/_api/">
<id>0832f8fd-2ca1-4152-877b-3b28fc3eb1dc</id>
<title />
<updated>2020-02-12T08:53:05Z</updated>
<entry m:etag=""385"">
<id>Web/Lists(guid\'891430d2-9610-455c-be63-aa1bfd3c482f\')/Items(1)</id>
<category term="SP.Data.WeatherInfoListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<link rel="edit" href="Web/Lists(guid\'891430d2-9610-455c-be63-aa1bfd3c482f\')/Items(1)" />
<title />
<updated>2020-02-12T08:53:05Z</updated>
<author>
<name />
</author>
<content type="application/xml">
<m:properties>
<d:Title>Лисаковск</d:Title>
<d:Date m:type="Edm.DateTime">2020-02-12T00:00:00Z</d:Date>
<d:Day m:type="Edm.Double">-8</d:Day>
<d:Night m:type="Edm.Double">-14</d:Night>
<d:Accuweather>Теплее</d:Accuweather>
<d:Gismeteo>Переменная облачность, небольшой снег</d:Gismeteo>
<d:Intellicast m:null="true" />
<d:theWeatherChannel m:null="true" />
</m:properties>
</content>
</entry>
...
以下代码不返回任何内容
url = 'https://portal.site.com/weather/_api/web/lists#'
r = requests.get(url, auth=HttpNtlmAuth('user','pass'))
xml_string = r.text
root = ET.fromstring(xml_string)
root.findall('{http://schemas.microsoft.com/ado/2007/08/dataservices/metadata}m:properties')
请有人帮我处理代码。 谢谢!
【问题讨论】:
-
你得到什么错误?
-
没有错误,只是我得到了空列表
-
看起来(我没有测试过)你只需要在你的 findall 中删除
m:前缀...root.findall('{http://schemas.microsoft.com/ado/2007/08/dataservices/metadata}properties')。
标签: python xml xml-parsing elementtree