Python:使用带有Find的名称空间进行索引

2024-06-13 14:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一段代码,可以索引一个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(如果索引不存在,它应该显示的值)。我正在努力让它与各种名称空间一起工作-请有人建议


Tags: orghttpcomponentsxmlcommonschemaselectricalxmlns