Я создаю немного кода, который может индексировать XML-файл, найти значение и заменить его другим, если я хочу. В настоящее время я застрял при индексации с использованием моих пространств имен с помощью lxml findall
Файл XML имеет следующий формат:
<?xml version="1.0"?>
<DiagramSheetModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Amtech.ProDesign.Components.Documents">
<Entities xmlns:a="http://schemas.datacontract.org/2004/07/Amtech.Common.Components.DiagramComponents">
<a:BaseEntity xmlns:b="http://schemas.datacontract.org/2004/07/Amtech.ProDesign.Components.DiagramComponents.Electrical" i:type="b:DistributionBoard">
<a:AttributePermissions xmlns:c="http://schemas.datacontract.org/2004/07/Amtech.Common.Components.Security" i:nil="true"/>
<a:UserColour xmlns:c="http://schemas.datacontract.org/2004/07/System.Windows.Media">
<c:A>0</c:A>
И код:
ns = {"a":"{http://schemas.datacontract.org/2004/07/Amtech.Common.Components.DiagramComponents}",
"b":"{http://schemas.datacontract.org/2004/07/Amtech.Common.Components.DiagramComponents.Electrical}",
"c":"{http://schemas.datacontract.org/2004/07/Amtech.ProDesign.Components.DiagramComponents.NonElectrical}",
"dces":"{http://schemas.datacontract.org/2004/07/Amtech.ProDesign.Components.DiagramComponents.Electrical.Supply}",
"d":"http://schemas.datacontract.org/2004/07/System.Windows.Media"
}
root = lxml.objectify.fromstring(xml)
for e in root.Entities.getchildren():
if e.findall('.//AttributePermissions.//UserColour',ns):
for ItemName in e.findall('.//AttributePermissions.//UserColour',ns):
ItemName = ItemName.A
else:
ItemName = "N/A"
return ItemName
В данный момент возвращается N / A (как значение, которое должно отображаться, если индекс не существует). Я пытаюсь заставить его работать с различными пространствами имен - кто-нибудь может посоветовать?