首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python minidom解析xml

用Python minidom解析xml
EN

Stack Overflow用户
提问于 2020-08-21 07:46:51
回答 2查看 49关注 0票数 1

我试图用Python minidom库解析.xml文件中的元素,但似乎不起作用。它返回"IndexError list out of range“。也许我使用的方法/库不正确。请建议如何执行此操作。谢谢

代码语言:javascript
复制
from xml.dom import minidom
doc = minidom.parse('/path/to/file/runParameters.xml')
docs = doc.getElementsByTagName('RunParameters')
for el in docs:
    cloud = el.getElementsByTagName("EnableCloud")
    print(cloud[0].firstChild.nodeValue)

下面是该文件的结构

代码语言:javascript
复制
<?xml version="1.0"?>
<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EnableCloud>false</EnableCloud>
  <RunParametersVersion>MiSeq</RunParametersVersion>
  <CopyManifests>true</CopyManifests>
  <FlowcellRFIDTag>
    <SerialNumber>000000000-AG01C</SerialNumber>
    <PartNumber>17772</PartNumber>
    <ExpirationDate>2016-04-10T00:00:00</ExpirationDate>
  </FlowcellRFIDTag>
</RunParameters>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-21 18:03:12

使用ElementTree

代码语言:javascript
复制
import xml.etree.ElementTree as ET


xml = '''<?xml version="1.0"?>
<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EnableCloud>false</EnableCloud>
  <RunParametersVersion>MiSeq</RunParametersVersion>
  <CopyManifests>true</CopyManifests>
  <FlowcellRFIDTag>
    <SerialNumber>000000000-AG01C</SerialNumber>
    <PartNumber>17772</PartNumber>
    <ExpirationDate>2016-04-10T00:00:00</ExpirationDate>
  </FlowcellRFIDTag>
</RunParameters>'''

root = ET.fromstring(xml)
print(root.find('.//EnableCloud').text)

输出

代码语言:javascript
复制
false
票数 0
EN

Stack Overflow用户

发布于 2020-08-21 10:35:11

这段代码适用于我。请在您的系统上试用:

代码语言:javascript
复制
xx = '''
<?xml version="1.0"?>
<RunParameters xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EnableCloud>false</EnableCloud>
  <RunParametersVersion>MiSeq</RunParametersVersion>
  <CopyManifests>true</CopyManifests>
  <FlowcellRFIDTag>
    <SerialNumber>000000000-AG01C</SerialNumber>
    <PartNumber>17772</PartNumber>
    <ExpirationDate>2016-04-10T00:00:00</ExpirationDate>
  </FlowcellRFIDTag>
</RunParameters>
'''.strip()

with open('test2.xml','w') as f:
   f.write(xx)
   
from xml.dom import minidom
doc = minidom.parse('test2.xml')
docs = doc.getElementsByTagName('RunParameters')
for el in docs:
    cloud = el.getElementsByTagName("EnableCloud")
    print(cloud[0].firstChild.nodeValue)

输出

代码语言:javascript
复制
false
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63514602

复制
相关文章

相似问题

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