XML 文件解析 - 从每个 parent 和它们自己的 children 获取数据

XML file parsing - Get data from each parent and their own children

我想从每个 parent 和他们自己的 children 中获取来自 XML 文件的数据。

我正在尝试解析这个 XML 文件

<DB>
    <Entry>
        <Name>Assembly.iam</Name>
        <DisplayName>Assembly.iam</DisplayName>
        <Scalar>
            <Name>d0</Name>
            <DisplayName>d0 (value = 0 mm)</DisplayName>
            <Value>0</Value>
        </Scalar>
        <Scalar>
             <Name>d1</Name>
             <DisplayName>d1 (value = 0 mm)</DisplayName>
        <Value>0</Value>
        </Scalar>
    </Entry>
    <Entry>
        <Name>Ground.ipt</Name>
        <DisplayName>Ground.ipt</DisplayName>
        <Scalar>
            <Name>Ground_length</Name>
            <DisplayName>Ground_length (value = 160 mm)</DisplayName>
            <Value>160</Value>
        </Scalar>
        <Scalar>
            <Name>d2</Name>
            <DisplayName>d2 (value = 80 mm)</DisplayName>
            <Value>80</Value>
        </Scalar>
    </Entry>
</DB>

事实上,我想获取<DisplayName></DisplayName>中的数据。 然后,我想将该数据放入这样的元组数组中

[(Assembly.iam,[d0 (value = 0 mm), d1 (value = 0 mm)]),
(Ground.ipt,[Ground_length (value = 160 mm), d2 (value = 80 mm)])

我已尝试将 xml.etree.cElementTree 库与此代码一起使用

from xml.etree import cElementTree
import numpy as np

workingDir = "C:/Users/Vince/Test"
newStrWorkingDir = str.replace(workingDir, '/', '\')
tree = cElementTree.parse(newStrWorkingDir + "\test.xml")
root = tree.getroot()
tab = np.empty(shape=(0, 0))
tabEntry = np.empty(shape=(0, 0))
tabScalar = np.empty(shape=(0, 0))

for entry in root.findall('Entry'):
    entryNames = entry.findall("./DisplayName")
    entryNamesText = entry.find("./DisplayName").text
    tabEntry = np.append(tabEntry,entryNamesText)
    for scalar in entry.findall('Scalar'):
        scalarNames = scalar.findall("./DisplayName")
        scalarNamesText = scalar.find("./DisplayName").text
        tabScalar = np.append(tabScalar,scalarNamesText)
        tab = np.append(tab,(entryNamesText,scalarNamesText))

print(tab)

但它输出我这个

['Assembly.iam' 'd0 (value = 0 mm)'
'Assembly.iam' 'd1 (value = 0 mm)'
'Ground.ipt' 'Ground_length (value = 160 mm)' 
'Ground.ipt' 'd2 (value = 80 mm)']

要获得您想要的结构,您必须构建列表的列表:

import os
from xml.etree import cElementTree

workingDir = "C:\Users\Vince\Test"
tree = cElementTree.parse(os.path.join(newStrWorkingDir, "test.xml"))
root = tree.getroot()
tab = []

for entry in root.findall('Entry'):
    entry_name = entry.findtext("./DisplayName")
    scalar_names = [e.text for e in entry.findall('Scalar/DisplayName')]
    tab.append((entry_name, scalar_names))
print(tab)