在Python中通过“ElementTree”解析XML

2024-04-30 04:29:37 发布

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

我试图解析XML文件,但对名称空间和标记有点困惑。最后,我需要从中获取值

  • d:标题
  • d:日期
  • d:白天
  • d:晚上
  • d:Accuweather
  • d:吉斯米特奥
<?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="&quot;385&quot;">
          <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')

有人能帮我处理一下密码吗。 谢谢


Tags: comidhttpdatawwwtypeservicexml
1条回答
网友
1楼 · 发布于 2024-04-30 04:29:37

您可以创建别名的dict名称空间,以便于xpath查询

from xml.etree.cElementTree import ElementTree

tree = ElementTree(file="file.xml")
root = tree.getroot()
namespaces = {
    "p": "http://www.w3.org/2005/Atom",
    "m": "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata",
    "d": "http://schemas.microsoft.com/ado/2007/08/dataservices",
}
xpath = "p:entry/p:content/m:properties"
res = root.findall(xpath, namespaces=namespaces)

values = []

for x in res:
    values.append(
        {
            "Title": x.find("d:Title", namespaces=namespaces).text,
            "Date": x.find("d:Date", namespaces=namespaces).text,
            "Day": x.find("d:Day", namespaces=namespaces).text,
            "Night": x.find("d:Night", namespaces=namespaces).text,
            "Accuweather": x.find("d:Accuweather", namespaces=namespaces).text,
            "Gismeteo": x.find("d:Gismeteo", namespaces=namespaces).text,
        }
    )
print(values)

印刷品

[
    {
        "Title": "Лисаковск",
        "Date": "2020-02-12T00:00:00Z",
        "Day": "-8",
        "Night": "-14",
        "Accuweather": "Теплее",
        "Gismeteo": "Переменная облачность, небольшой снег",
    }
]

相关问题 更多 >