Python - XML:根据 parent 分离兄弟姐妹
Python - XML: Separating siblings per parent
目前我正在努力寻找正确的答案,所以如果有人能帮助我解决这个问题就太好了。我有一个更深的 XML,我想将其转换为 table。 XML 看起来像这样:
<Motherofall>
<Parent>
<Child>
<val1>XX1</val1>
<Child2>
<val2>YY1</val2>
<val2>YY2</val2>
<Child2>
<val2>YY3</val2>
<val2>YY4</val2>
</parent>
+<parent>
+<parent>
</Motherofall>
所以最终我想要作为输出的是一个 table 列 val1 和一个 colmun val2。
所以 val1 每 parent.
重复两次
Picture of table as pictured
import xml.etree.ElementTree as et
tree = et.parse(last_file)
for node in tree.findall('.//Parent'):
XX = node.find('.//Child')
print(XX.text)
for node2 in tree.findall('.//Child2'):
YY = node2.find('.//val1')
print(YY.text)
大家可能会注意到我对此很陌生,但是我找不到合适的答案。
我开始为您的输入文件添加一些顺序(例如添加
缺少结束标记),因此它包含:
<Motherofall>
<parent>
<Child>
<val1>XX1</val1>
</Child>
<Child2>
<val2>YY1</val2>
<val2>YY2</val2>
</Child2>
<Child2>
<val2>YY3</val2>
<val2>YY4</val2>
</Child2>
</parent>
<parent>
<Child>
<val1>XX2</val1>
</Child>
<Child2>
<val2>YY1</val2>
<val2>YY2</val2>
</Child2>
<Child2>
<val2>YY3</val2>
</Child2>
</parent>
</Motherofall>
代码的初始部分是读取 XML:
import xml.etree.ElementTree as et
tree = et.parse('Input.xml')
root = tree.getroot()
然后从中读取数据并创建一个Pandas DataFrame,你可以运行:
rows = []
for par in root.iter('parent'):
xx = par.findtext('Child/val1')
for vv in par.findall('Child2/val2'):
tt = vv.text
rows.append([xx, tt])
df = pd.DataFrame(rows, columns=['x', 'y'])
结果是:
x y
0 XX1 YY1
1 XX1 YY2
2 XX1 YY3
3 XX1 YY4
4 XX2 YY1
5 XX2 YY2
6 XX2 YY3
目前我正在努力寻找正确的答案,所以如果有人能帮助我解决这个问题就太好了。我有一个更深的 XML,我想将其转换为 table。 XML 看起来像这样:
<Motherofall>
<Parent>
<Child>
<val1>XX1</val1>
<Child2>
<val2>YY1</val2>
<val2>YY2</val2>
<Child2>
<val2>YY3</val2>
<val2>YY4</val2>
</parent>
+<parent>
+<parent>
</Motherofall>
所以最终我想要作为输出的是一个 table 列 val1 和一个 colmun val2。 所以 val1 每 parent.
重复两次Picture of table as pictured
import xml.etree.ElementTree as et
tree = et.parse(last_file)
for node in tree.findall('.//Parent'):
XX = node.find('.//Child')
print(XX.text)
for node2 in tree.findall('.//Child2'):
YY = node2.find('.//val1')
print(YY.text)
大家可能会注意到我对此很陌生,但是我找不到合适的答案。
我开始为您的输入文件添加一些顺序(例如添加 缺少结束标记),因此它包含:
<Motherofall>
<parent>
<Child>
<val1>XX1</val1>
</Child>
<Child2>
<val2>YY1</val2>
<val2>YY2</val2>
</Child2>
<Child2>
<val2>YY3</val2>
<val2>YY4</val2>
</Child2>
</parent>
<parent>
<Child>
<val1>XX2</val1>
</Child>
<Child2>
<val2>YY1</val2>
<val2>YY2</val2>
</Child2>
<Child2>
<val2>YY3</val2>
</Child2>
</parent>
</Motherofall>
代码的初始部分是读取 XML:
import xml.etree.ElementTree as et
tree = et.parse('Input.xml')
root = tree.getroot()
然后从中读取数据并创建一个Pandas DataFrame,你可以运行:
rows = []
for par in root.iter('parent'):
xx = par.findtext('Child/val1')
for vv in par.findall('Child2/val2'):
tt = vv.text
rows.append([xx, tt])
df = pd.DataFrame(rows, columns=['x', 'y'])
结果是:
x y
0 XX1 YY1
1 XX1 YY2
2 XX1 YY3
3 XX1 YY4
4 XX2 YY1
5 XX2 YY2
6 XX2 YY3