python - 使用 python 解析嵌套的 XML
问题描述
我已经搜索并尝试了用于 XML 数据的 python 库,例如 xml.etree.ElementTree,并从 StackOverflow 和其他网站寻找类似的解决方案。但是,我还没有找到适合我的情况的解决方案。
我拥有的 XML 文件如下所示:
<xmlInfo>
<NodeName Dn="Santiago_server"/>
<DataInfo>
<Period duration="60" end="2020-11-19 18:00:00"/>
<measT X="1">CPU</measT>
<measT X="2">Memory</measT>
<measT X="3">Disk</measT>
<measV object="Server#1">
<P X="1">7</r>
<P X="2">3</r>
<P X="3">8</r>
</measV>
<measV object="Server#2">
<P X="1">10</r>
<P X="2">12</r>
<P X="3">11</r>
</measV>
</DataInfo>
</xmlInfo>
上述 XML 文件的预期结果如下所示:
Date Time CPU-Server#1 CPU-Server#2 Memory-Server#1 Memory-Server#2 Disk-Server#1 Disk-Server#2
2020-11-19 18:00:00 7 10 3 12 8 11
非常感谢您的反馈。
谢谢
解决方案
您的 XML 格式有问题。我做了一点修改。不知道能不能满足你的需求。
from simplified_scrapy import SimplifiedDoc, utils, req
xml = '''
<xmlInfo>
<NodeName Dn="Santiago_server"/>
<DataInfo>
<Period duration="60" end="2020-11-19 18:00:00"/>
<measT X="1">CPU</measT>
<measT X="2">Memory</measT>
<measT X="3">Disk</measT>
<measV object="Server#1">
<P X="1">7</P>
<P X="2">3</P>
<P X="3">8</P>
</measV>
<measV object="Server#2">
<P X="1">10</P>
<P X="2">12</P>
<P X="3">11</P>
</measV>
</DataInfo>
</xmlInfo>
'''
doc = SimplifiedDoc(xml)
rows = [['Date','Time', 'CPU-Server#1', 'CPU-Server#2', ' Memory-Server#1', 'Memory-Server#2', 'Disk-Server#1', 'Disk-Server#2']]
for dataInfo in doc.selects('DataInfo'):
row = []
period = dataInfo.select('Period>end()').split(' ') # Get date and time
row.extend(period)
# measT = dataInfo.selects('measT>text()')
measVs = dataInfo.selects('measV').selects('P>text()') # Get all P
for i in range(len(measVs[0])):
for measV in measVs:
row.append(measV[i])
rows.append(row)
print (rows)
推荐阅读
- youtrack - 为什么我不能将“用户故事”作为一种类型访问?
- qt - 结束游戏功能
- migrate - 从使用规划器的 MS Teams 迁移到使用板的 MS Teams
- tensorflow - Keras 模型错误
- python - 是否有一种快速算法可以将集合的所有分区生成为大小为 2 的子集(和一个大小为 1 的子集)?
- postgresql - 在 PG 中创建 PARTITIONed 表时在“INTERVAL”处或附近出现语法错误
- r - 在 R 中将 NA 替换为 0
- javascript - Shaka Player 初始化失败并出现错误(无法在“MediaKeySy…ccess”上执行“createMediaKeys”:在唯一来源上不允许使用 EME)
- regex - Notepad++ 删除空行的单个实例
- flutter - 如何在 listtile 上使用 onlongpress 对 firebase 进行编辑