首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Etree Python提取XML元素

使用Etree Python提取XML元素
EN

Stack Overflow用户
提问于 2018-03-06 19:35:33
回答 1查看 497关注 0票数 0

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

我的XML文件:

代码语言:javascript
运行
复制
<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>

我的尝试

代码语言:javascript
运行
复制
for win in root.findall('./windows/window'):
                    dashwins = win.find('window[@class="dashboard"]') 
                    if dashwins != None:
                        print(dashwins.attrib)
                        for i in dashwins:
                            view1 = i.find('viewpoint')
                            for j in view1:
                                print(j.get('name'))
  • 只有当窗口标记中存在class=dashboard属性时,才需要提取视点名称。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 20:44:40

您可以扩展xpath表达式以获取目标window元素下的所有window元素,然后询问它们的name属性。

代码语言:javascript
运行
复制
>>> 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'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49138657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档