在python中反序列化xml.data

问题描述 投票:0回答:1

我有一个包含很多属性的 xml 文件。所有属性都有相同的名称

我确实有一个解决方案,但它需要将 id 添加到属性中,以便我可以选择我想要的解决方案。但这需要在 xml 文件中进行调整。至于我的研究论文,我无法更改 xml 文件。那么,有没有一个命令或一段代码可以让 python 知道,我只想要属性名称,其值为 Geometry?例如。

如果我打电话给酒店,我就会得到所有的信息。我不知道如何过滤这部分以获得我想要的部分。有什么建议吗?

我在 python 中添加了我的解决方案。但一定有一种方法无需对 xml 进行调整。 Xml data Python code calling prop name Geometry by adding ids in the xmlfile

'''
import xml.etree.ElementTree as ET


#parse 
mytree = ET.parse('C:/Users/f.badloe/.spyder-py3\Stagefiles/ASD_18_244_KW_0001_WM0230(BaseanlogROB).xml') # data van xml naar python
myroot = mytree.getroot() # data zoeken in de xml file

#print (myroot.tag)
#print (myroot[2][0][0][0].tag)

#myroot[2].set('Test','20')


'''
for reference in myroot.iter('prop'):
   print(reference.attrib)
   print(reference.text)
'''


'''all shapes of the figures 
'''



for shape in myroot.iter('shape'):
    
    shapeType = shape.attrib['shapeType']
    shapeName =shape.attrib['Name']
    print(shapeName)





'''

id=1
for z in myroot.iter('prop'):
    z.set('id', str(id))
    id += 1
    #print(z.attrib)
'''

''' Geometries values of all shapes individual manier 1 '''

'''
Geometry = myroot.find(".//prop[@id='35']")
print(Geometry.text)
print(Geometry.attrib)  
 
Geometry = myroot.find(".//prop[@id='65']")
print(Geometry.text)
print(Geometry.attrib) 
 
Geometry = myroot.find(".//prop[@id='95']")
print(Geometry.text)
print(Geometry.attrib)
   
Geometry = myroot.find(".//prop[@id='124']")
print(Geometry.text)
print(Geometry.attrib)  

Geometry = myroot.find(".//prop[@id='147']")
print(Geometry.text)
print(Geometry.attrib)  

Geometry = myroot.find(".//prop[@id='170']")
print(Geometry.text)
print(Geometry.attrib)  

Geometry = myroot.find(".//prop[@id='192']")
print(Geometry.text)
print(Geometry.attrib)  
'''

'''manier 2 '''

#for elements in myroot.findall(".//shape//prop[@name = 'Geometry']"):
    
    #print(elements.text, shapeName)
     
for elements in myroot.findall(".//shape//prop[@name = 'Location']"):
    
    print(elements.text)





#nieuwe xml file
mytree.write ('ASD_18_244_KW_0001_WM0230')
'''
'''
<?xml version="1.0" encoding="UTF-8"?>
<panel version="14">
 <properties>
  <prop name="Name">
   <prop name="nl_NL.utf8"></prop>
  </prop>
  <prop name="Size">125 112</prop>
  <prop name="BackColor">BNO_DonkerGrijs</prop>
  <prop name="RefPoint">38 53</prop>
  <prop name="InitAndTermRef">True</prop>
  <prop name="SendClick">False</prop>
  <prop name="RefFileName"></prop>
  <prop name="DPI">96</prop>
  <prop name="PDPI">141.951</prop>
  <prop name="ConnectorPoints">
   <prop name="Location" id="1">28 63</prop>
   <prop name="Location" id="2">53 38</prop>
   <prop name="Location" id="3">28 13</prop>
   <prop name="Location" id="4">3 38</prop>
  </prop>
  <prop name="layoutType">None</prop>
 </properties>
 <events>
  <script name="ScopeLib" isEscaped="1"><![CDATA[public void SetVisibility(bool visible)
{
  Waarde.visible(visible);
  Uom.visible(visible);
  Naam.visible(visible);
  High.visible(visible);
  Low.visible(visible);
  Cirkel.visible(visible);
  KLIKFRAME.visible(visible);
}

string dp,
       naam,
       uom,
       dpQdwState,
       dpMeting;

DatapuntDescription dpDesc;

void Init()
{
  int dpConnectRetVal;

  dp = $dp;
  naam = $naam;
  uom = $uom;
  dpQdwState = dp + &quot;.QdwState&quot;;
  dpMeting = dp +&quot;.QfVal&quot;;

  dpDesc.setDp(dp);
  KLIKFRAME.toolTipText(dpDesc.sDescription);

  //datapunt connectie
  dpConnectRetVal = dpConnect( &quot;Callback&quot;, true, dpQdwState,
                                                 dpMeting);
  CheckDpConnect(dpConnectRetVal, getLastError());

  Naam.text = naam;
  Uom.text = uom;
  Waarde.format = $format;
}

void Callback(string DPE1, bit32 states,
              string DPE2, float meting)
{
  Waarde.text = meting;
  Waarde.format = $format;

  bool warning = getBit(states, 6),
       alarm   = getBit(states, 7),
       low     = getBit(states, 10),
       high    = getBit(states, 11);

  string color;

  if(warning)
  {
    color = &quot;BNO_Geel&quot;;
  }
  else if(alarm)
  {
    color = &quot;BNO_Rood&quot;;
  }
  else
  {
    color = &quot;BNO_Wit&quot;;
  }

  Cirkel.foreCol(color);

  if(low)
  {
    Low.backCol(color);
  }
  else
  {
    Low.backCol(&quot;_Transparent&quot;);
  }

  if(high)
  {
    High.backCol(color);
  }
  else
  {
    High.backCol(&quot;_Transparent&quot;);
  }
}

void OpenOnderhoud()
{
  OpenFaceplate(dp , dpDesc.sDescription);
}
]]></script>
  <script name="Initialize" isEscaped="1"><![CDATA[main()
{
  Init();
}
]]></script>
 </events>
 <shapes>
  <shape Name="Waarde" shapeType="PRIMITIVE_TEXT" layerId="0">
   <properties>
    <prop name="serialId">1</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">41 28</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">BNO_Wit</prop>
    <prop name="BackColor">_Window</prop>
    <prop name="TabOrder">0</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="TransparentForMouse">True</prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">False</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,1]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[outline]</prop>
    <prop name="Geometry">1 0 0 0.7857142857142857 -13 9</prop>
    <prop name="Location">41 28</prop>
    <prop name="Font">
     <prop name="nl_NL.utf8">Arial Narrow,-1,11,5,50,0,0,0,0,0,Standaard</prop>r
    </prop>
    <prop name="Text">
     <prop name="nl_NL.utf8">Waarde</prop>
    </prop>
    <prop name="Distance">2</prop>
    <prop name="BorderOffset">2</prop>
    <prop name="Bordered">False</prop>
    <prop name="Fit">True</prop>
    <prop name="Transformable">False</prop>
    <prop name="TextFormat">[0.3f,False,False,AlignHCenter,False,False]</prop>
   </properties>
  </shape>
  <shape Name="Uom" shapeType="PRIMITIVE_TEXT" layerId="0">
   <properties>
    <prop name="serialId">2</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">75 28</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">BNO_Wit</prop>
    <prop name="BackColor">_Window</prop>
    <prop name="TabOrder">1</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="TransparentForMouse">True</prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">False</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,1]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[outline]</prop>
    <prop name="Geometry">1.409090909090909 0 0 0.8571428571428571 -77.68181818181817 20</prop>
    <prop name="Location">75 28</prop>
    <prop name="Font">
     <prop name="nl_NL.utf8">Arial Narrow,-1,11,5,50,0,0,0,0,0,Standaard</prop>
    </prop>
    <prop name="Text">
     <prop name="nl_NL.utf8">Uom</prop>
    </prop>
    <prop name="Distance">2</prop>
    <prop name="BorderOffset">2</prop>
    <prop name="Bordered">False</prop>
    <prop name="Fit">True</prop>
    <prop name="Transformable">False</prop>
    <prop name="TextFormat">[0s,,,AlignHCenter]</prop>
   </properties>
  </shape>
  <shape Name="Naam" shapeType="PRIMITIVE_TEXT" layerId="0">
   <properties>
    <prop name="serialId">3</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">67 37</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">BNO_Wit</prop>
    <prop name="BackColor">_Window</prop>
    <prop name="TabOrder">2</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="TransparentForMouse">True</prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">False</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,1]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[outline]</prop>
    <prop name="Geometry">1.758538587848933 0 0 1 -90.44162561576357 24</prop>
    <prop name="Location">67 37</prop>
    <prop name="Font">
     <prop name="nl_NL.utf8">Arial Narrow,-1,11,5,50,0,0,0,0,0,Standaard</prop>
    </prop>
    <prop name="Text">
     <prop name="nl_NL.utf8">NAAM</prop>
    </prop>
    <prop name="Distance">2</prop>
    <prop name="BorderOffset">2</prop>
    <prop name="Bordered">False</prop>
    <prop name="Fit">True</prop>
    <prop name="Transformable">False</prop>
    <prop name="TextFormat">[0s,,,AlignHCenter]</prop>
   </properties>
  </shape>
  <shape Name="High" shapeType="POLYGON" layerId="0">
   <properties>
    <prop name="serialId">4</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">90 40</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">_Transparent</prop>
    <prop name="BackColor">_Transparent</prop>
    <prop name="TabOrder">3</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">True</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,1]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[solid]</prop>
    <prop name="Geometry">1 0 0 1 -70.00000000000003 -14</prop>
    <prop name="Closed">True</prop>
    <prop name="Points">
     <prop name="Location">90 40</prop>
     <prop name="Location">98 30</prop>
     <prop name="Location">106 40</prop>
    </prop>
   </properties>
  </shape>
  <shape Name="Low" shapeType="POLYGON" layerId="0">
   <properties>
    <prop name="serialId">6</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">90 50</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">_Transparent</prop>
    <prop name="BackColor">_Transparent</prop>
    <prop name="TabOrder">5</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">True</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,1]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[solid]</prop>
    <prop name="Geometry">1.142857142857143 0 0 1 -82.85714285714288 -34</prop>
    <prop name="Closed">True</prop>
    <prop name="Points">
     <prop name="Location">90 50</prop>
     <prop name="Location">97 60</prop>
     <prop name="Location">104 50</prop>
    </prop>
   </properties>
  </shape>
  <shape Name="Cirkel" shapeType="ELLIPSE" layerId="0">
   <properties>
    <prop name="serialId">8</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">30.5 48.5</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">BNO_Wit</prop>
    <prop name="BackColor">_Transparent</prop>
    <prop name="TabOrder">6</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">True</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,2]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[solid]</prop>
    <prop name="Geometry">0.8508771929824561 0 0 0.8508771929824561 2.048245614035088 -3.267543859649122</prop>
    <prop name="Center">30.5 48.5</prop>
    <prop name="X-Radius">28.5</prop>
    <prop name="Y-Radius">28.5</prop>
   </properties>
  </shape>
  <shape Name="KLIKFRAME" shapeType="RECTANGLE" layerId="0">
   <properties>
    <prop name="serialId">10</prop>
    <prop name="Type"></prop>
    <prop name="RefPoint">385 122</prop>
    <prop name="Enable">True</prop>
    <prop name="Visible">True</prop>
    <prop name="ForeColor">_Transparent</prop>
    <prop name="BackColor">_Transparent</prop>
    <prop name="HoverForeCol">BNO_Wit</prop>
    <prop name="TabOrder">7</prop>
    <prop name="ToolTipText">
     <prop name="nl_NL.utf8"></prop>
    </prop>
    <prop name="layoutAlignment">AlignNone</prop>
    <prop name="snapMode">Point</prop>
    <prop name="DashBackColor">_Transparent</prop>
    <prop name="AntiAliased">False</prop>
    <prop name="LineType">[solid,oneColor,JoinBevel,CapProjecting,1]</prop>
    <prop name="BorderZoomable">False</prop>
    <prop name="FillType">[solid]</prop>
    <prop name="Geometry">0.1256281407035175 0 0 0.5039370078740157 4.633165829145731 13.51968503937009</prop>
    <prop name="BorderStyle">Normal</prop>
    <prop name="Location">385 122</prop>
    <prop name="Size">-399 -128</prop>
    <prop name="CornerRadius">0</prop>
    <prop name="Transformable">True</prop>
   </properties>
   <events>
    <script name="Clicked" isEscaped="1"><![CDATA[main(mapping event)
{
  OpenOnderhoud();
}
]]></script>
   </events>
  </shape>
  <reference parentSerial="-1" Name="IOERROR" referenceId="1">
   <properties>
    <prop name="FileName">Generiek/Symbolen/SymIOFAIL.pnl</prop>
    <prop name="Location">0 0</prop>
    <prop name="Geometry">5.555555555555555 0 0 7.11111111111111 2.999999999999999 11</prop>
    <prop name="TabOrder">8</prop>
    <prop name="dollarParameters">
     <prop name="dollarParameter">
      <prop name="Dollar">$dp</prop>
      <prop name="Value">$dp</prop>
     </prop>
    </prop>
    <prop name="layoutAlignment">AlignNone</prop>
   </properties>
  </reference>
 </shapes>
 <groups>
  <layout parentSerial="-1" Name="LAYOUT_GROUP1" serial="0">
   <properties>
    <prop name="shapeSerial">2</prop>
    <prop name="shapeSerial">1</prop>
    <prop name="isContainerShape">False</prop>
    <prop name="layoutType">Grid</prop>
   </properties>
  </layout>
 </groups>
</panel>

'''
python xml deserialization elementtree
1个回答
0
投票

我找到了一个解决方案,无需在 xml 文件中进行调整。 通过这个命令我可以选择我需要的属性。

for prop in myroot.findall(".//shape[@Name= 'Waarde']//prop[@name ='RefPoint']"): RefPoint= print(prop.text)

© www.soinside.com 2019 - 2024. All rights reserved.