См. Документы (и этот ответ ) для получения подробной информации об обработке пространств имен с ElementTree.
Вот пример:
import xml.etree.ElementTree as ET
ns_map = {"wlan": "http://www.microsoft.com/networking/WLAN/profile/v1"}
tree = ET.parse("input.xml")
print(tree.find(".//wlan:keyMaterial", namespaces=ns_map).text)
печатает ...
THIS IS WHAT I WANNA GET
Если вы хотите изменить это значение и сохранить его в файл, попробуйте что-то вроде этого:
import xml.etree.ElementTree as ET
ns_map = {"wlan": "http://www.microsoft.com/networking/WLAN/profile/v1"}
# Need this to make sure a prefix isn't added to your namespace declaration.
ET.register_namespace("", ns_map.get("wlan"))
tree = ET.parse("input.xml")
try:
tree.find(".//wlan:keyMaterial", namespaces=ns_map).text = "NEW VALUE!"
except AttributeError:
print("Unable to modify the keyMaterial value.")
tree.write("output.xml", xml_declaration=True, encoding="utf-8")
Вывод (вывод . xml)
<?xml version='1.0' encoding='utf-8'?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1" xmlns:ns1="http://www.microsoft.com/networking/WLAN/profile/v3">
<name>antigon</name>
<SSIDConfig>
<SSID>
<name>antigon</name>
</SSID>
</SSIDConfig>
<connectionType>ESS</connectionType>
<connectionMode>auto</connectionMode>
<MSM>
<security>
<authEncryption>
<authentication>WPA2PSK</authentication>
<encryption>AES</encryption>
<useOneX>false</useOneX>
</authEncryption>
<sharedKey>
<keyType>passPhrase</keyType>
<protected>false</protected>
<keyMaterial>NEW VALUE!</keyMaterial>
</sharedKey>
</security>
</MSM>
<ns1:MacRandomization>
<ns1:enableRandomization>false</ns1:enableRandomization>
</ns1:MacRandomization>
</WLANProfile>
Примечание: ElementTree не справляется с работой более чем с одним пространством имен по умолчанию, поэтому префикс "ns1" добавляется в вывод.