Python xml 带有命名空间的解析器

Python xml parser with namespaces

亲爱的, 我有一个 xml 文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/xxxx//bb/v1 /xyz/it/Data/v1/Data-1_2.xsd" version="1.2" xmlns="http://xx/it//Data/v1">
  <Header>
    <Location>abc</Location>
    <Date start="date-time"/>

我正在尝试解析不同的标签和属性。然而,xmln 似乎搞乱了解析。 我正在使用

这样的代码
tree = ET.parse(input_filename)
root = tree.getroot()
location = tree.find("./Header/Location").text
time = tree.find("./Header/Date").attrib['start']

当我从输入文件

中手动删除 <?xml version="1.0" encoding="utf-8"?> <Data > <Header> <Location>abc</Location> <Date start="date-time"/>

但保留它会出错

location = tree.find("./Header/Location").text
AttributeError: 'NoneType' object has no attribute 'text'

我尝试了将近90% 的建议仍然没有好的结果。 非常感谢。

现代 Python 版本支持命名空间的通配符。考虑一下:-

import xml.etree.ElementTree as ET

xml = '''<?xml version="1.0" encoding="utf-8"?>
<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/xxxx//bb/v1 /xyz/it/Data/v1/Data-1_2.xsd" version="1.2" xmlns="http://xx/it//Data/v1">
  <Header>
    <Location>abc</Location>
    <Date start="date-time"/>
  </Header>
</Data>'''

tree = ET.fromstring(xml)

location = tree.find('.//{*}Header/{*}Location').text
_time = tree.find('.//{*}Header/{*}Date').attrib['start']

print(f'Location={location}, time={_time}')