Python: индексирование с использованием пространств имен с Findall - PullRequest
0 голосов
/ 05 июля 2019

Я создаю немного кода, который может индексировать 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 (как значение, которое должно отображаться, если индекс не существует). Я пытаюсь заставить его работать с различными пространствами имен - кто-нибудь может посоветовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...