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}')
亲爱的, 我有一个 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}')