ElementTree Python:如果兄弟姐妹是嵌套的,如何提取兄弟姐妹?

问题描述 投票:1回答:1

我有一个XML文件,我试图转换为Excel数据集。 XML的排列如下:

<XML Data>
    <Record>
        <ID>
            <Client id="01"></Client>
        </ID>
        <Service>
            <Product id="A"></Product>
            <Product id="B"></Product>
            <Product id="C"></Product>
        </Service>
    </Record>
    <Record>
        <ID>
            <Client id="02"></Client>
        </ID>
        <Service>
            <Product id="A"></Product>
            <Product id="B"></Product>
            <Product id="Y"></Product>
        </Service>
    </Record>
    <Record>
        <ID>
            <Client id="24"></Client>
        </ID>
        <Service>
            <Product id="U"></Product>
        </Service>
    </Record>
</XML Data>

如您所见,每条记录显示一个具有多个服务的客户端。

我正在尝试仅使用ElementTree完成此操作。这是为每个客户端ID返回所有服务的错误代码 - 我无法弄清楚如何让它返回客户端实际拥有的每个服务:

for x in root.findall("Record/ID/Client"):
    client = x.get("id")
    for y in root.findall('.//Service/Product'):
        service = y.get("id")
        print(client, service)

我试图以CSV格式安排这样安排:

ClientID    ServiceID
01          A
01          B
01          C
02          A
02          B
02          Y
24          U

任何建议将不胜感激!我查了一下,但只能找到显示如何提取实际兄弟姐妹的资源 - 因为客户ID和服务ID是我要提取的孩子的父母,这被证明有点混乱。谢谢!

xml python-3.x xml-parsing elementtree
1个回答
2
投票

而不是首先选择qazxsw poi,首先选择qazxsw poi。

然后你的第二个for循环可以从Client更改为Record只会找到当前root.finallx.findall元素。

例...

XML输入(test.xml;修复无效的根元素)

Product

蟒蛇

Record

打印输出

<XML_Data>
    <Record>
        <ID>
            <Client id="01"></Client>
        </ID>
        <Service>
            <Product id="A"></Product>
            <Product id="B"></Product>
            <Product id="C"></Product>
        </Service>
    </Record>
    <Record>
        <ID>
            <Client id="02"></Client>
        </ID>
        <Service>
            <Product id="A"></Product>
            <Product id="B"></Product>
            <Product id="Y"></Product>
        </Service>
    </Record>
    <Record>
        <ID>
            <Client id="24"></Client>
        </ID>
        <Service>
            <Product id="U"></Product>
        </Service>
    </Record>
</XML_Data>
© www.soinside.com 2019 - 2024. All rights reserved.