使用Etree Python提取XML元素

使用Etree Python提取XML元素,python,python-3.x,xml-parsing,elementtree,Python,Python 3.x,Xml Parsing,Elementtree,在我的XML文件中,我有一些windows标记,我想从这些标记中,在适当的窗口名称下逐个提取视点的名称 我的XML文件: <windows> <window class='dashboard' maximized='true' name='Dashboard 1'> <viewpoints> <viewpoint name='Category sheet'> <zoom type='entire

在我的XML文件中,我有一些windows标记,我想从这些标记中,在适当的窗口名称下逐个提取视点的名称

我的XML文件:

<windows>
<window class='dashboard' maximized='true' name='Dashboard 1'>
      <viewpoints>
        <viewpoint name='Category sheet'>
          <zoom type='entire-view' />
        </viewpoint>
        <viewpoint name='Segment Sheet'>
          <zoom type='entire-view' />
          <selection-collection>
            <tuple-selection>
              <tuple-reference>
                <tuple-descriptor>
                  <pane-descriptor>
                    <x-fields>
                      <field>[federated.1y3sjvb0pyupci132wn6b0wdgpc3].[none:Segment:nk]</field>
                    </x-fields>
                    <y-fields>
                      <field>[federated.1y3sjvb0pyupci132wn6b0wdgpc3].[sum:Sales:qk]</field>
                    </y-fields>
                  </pane-descriptor>
                  <columns>
                    <field>[federated.1y3sjvb0pyupci132wn6b0wdgpc3].[none:Segment:nk]</field>
                    <field>[federated.1y3sjvb0pyupci132wn6b0wdgpc3].[sum:Sales:qk]</field>
                  </columns>
                </tuple-descriptor>
                <tuple>
                  <value>&quot;Corporate&quot;</value>
                  <value>706146.36680000008</value>
                </tuple>
              </tuple-reference>
            </tuple-selection>
          </selection-collection>
        </viewpoint>
        <viewpoint name='Subcat Sheet'>
          <zoom type='entire-view' />
        </viewpoint>
        <viewpoint name='sub cat grp Sheet'>
          <zoom type='entire-view' />
        </viewpoint>
      </viewpoints>
      <active id='4' />
    </window>
    <window class='dashboard' name='Story 1'>
      <viewpoints />
      <active id='4' />
    </window>
  </windows>
  • 当且仅当class=dashboard属性存在于窗口标记内时,才需要提取视点名称

您可以扩展xpath表达式,以获取目标
窗口
元素下的所有
视点
元素,然后请求它们的
名称
属性

>>> from xml.etree import ElementTree
>>> tree = ElementTree.parse('sanu.xml')
>>> for el in tree.findall('.//window[@class="dashboard"]//viewpoint'):
...     el.attrib['name']
... 
'Category sheet'
'Segment Sheet'
'Subcat Sheet'
'sub cat grp Sheet'

谢谢@Bill BellNow我执行了你推荐的代码,但是控制没有进入for-loop。希望你能对此@Bill Bell作出回应我们在非常不同的时区。(我住在加拿大)请你解释一下“控制不进入for循环”是什么意思
>>> from xml.etree import ElementTree
>>> tree = ElementTree.parse('sanu.xml')
>>> for el in tree.findall('.//window[@class="dashboard"]//viewpoint'):
...     el.attrib['name']
... 
'Category sheet'
'Segment Sheet'
'Subcat Sheet'
'sub cat grp Sheet'