Ваш документ имеет пространства имен на узлах школа и ученик , вам необходимо включить пространства имен в свой поиск. Так как вы ищете ca1 , который находится под student , вам необходимо указать пространство имен, которое имеет student узел:
import xml.etree.ElementTree as ET
tree = ET.parse('mca.xml')
root = tree.getroot()
def getElementsData(xpath, namespaces):
elements = root.findall(xpath, namespaces)
if elements == []:
raise SystemExit("Invalid xpath provided")
return elements
namespaces = {'ns_school': 'loyo:22:2.2', 'ns_student': 'loyo:5:542'}
elements = getElementsData('.//ns_student:ca1', namespaces)
for element in elements:
print(element)
Примечания
- Поскольку ваши пространства имен не имеют имен, я дал им такие имена, как ns_school , ns_student , но эти имена могут быть любыми (например, ns1 , * 1023). * mystudent , ...)
- В более сложной системе я рекомендую вызывать некоторые другие виды ошибок и позволить вызывающей стороне решать, выходить или нет.