解析嵌套的 XML 文件并获取 python 中上一个标签的值

Parse nested XML file and get the value of previous tag in python

我有一个巨大的嵌套 .xml 文件,其中包含很多条目。如果我知道 child ID,我需要的是找到一个以前的值。

提取我的 xml 文件:

<?xml version="1.0"?>
<nodes>
    <node>
        <node_id>0x2D</node_id>
        <num_1>11</num_1>
        <num_2>905.908</num_2>
        <signs>
            <sign>
                <sign_id>30</sign_id>
                <name>INDEX_0</name>
                <size_b>842069</size_b>
                <content>
                    <models>
                        <model>1_x</model>
                        <model>2_x</model>
                        <model>3_x</model>
                        <model>4_x</model>
                    </models>
                    <images>
                        <image>
                            <value>VALUE1</value>
                            <folder_ids>
                                <folder_id>012345678</folder_id>
                            </folder_ids>
                        </image>
                        <image>
                            <value>VALUE2</value>
                            <folder_ids>
                                <folder_id>1235365454</folder_id>
                            </folder_ids>
                        </image>
                        <image>
                            <value>VALUE3</value>
                            <folder_ids>
                                <folder_id>3562377456</folder_id>
                                <folder_id>3566743626</folder_id>
                                <folder_id>012345678</folder_id>
                            </folder_ids>
                        </image>
                        <image>
                            <value>VALUE4</value>
                            <folder_ids>
                                <folder_id>34627876</folder_id>
                            </folder_ids>
                        </image>
                        <image>
.
.
.

例如,如果我需要查找包含 012345678 folder_id 的所有值。 我尝试使用 lxml 库。 简单代码:

from lxml import etree

tree = etree.parse('D:\test_nested_xml.xml')
#root = etree.Element("root")
for element in tree.iter(tag="folder_id"):
    if element.text == '012345678':
        print("%s - %s" % (element.text, element.getparent))

但在输出中我得到以下条目:

012345678 - <bound method _Element.getparent of <Element folder_id at 0x2cf2648>>
012345678 - <bound method _Element.getparent of <Element folder_id at 0x2cf2620>>

而且这不是我需要的。

我的预期结果是这样的:

012345678 - VALUE1
012345678 - VALUE3

有人可以帮助我如何正确解析 xml 文件并获得我需要的东西吗?

您当前正在打印方法本身。

print("%s - %s" % (element.text, element.getparent))

如果想看returns是什么方法,需要调用它

print("%s - %s" % (element.text, element.getparent()))

您也可以使用 XPath 一步 select 所需的值:

search_id = '012345678'

for value in tree.xpath(f"//image[folder_ids/folder_id='{search_id}']/value"):
    print(value.text)