python getchildren,获取Python中特定节点的所有子级

本文讲述了如何使用Python的lxml库解析XML文件,并在找到SiblingOneA节点后,检查其相邻节点是否为SiblingTwoA。如果找到,获取该SiblingTwoA节点的所有子元素及其值。提供了获取子元素值的代码实现,以及针对不同输出格式的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I have the following example.xml structure:

This is Sibling One A

Value of child one A

Value of child two A

This is a different value for Sibling one A

This is a different value for Child one A

This is a different value for Child Two A

A final value for Sibling one A

A final value for Child one A

A final value for Child one A

My main requirement is to loop through each one of the nodes and when the current node in question is "SiblingOneA", the code makes a check to see if the sibling node directly adjacent is "SiblingTwoA". If so, then it should retrieve all the children nodes (both the elements themselves, and the values within the elements).

So far, this is my code:

from lxml import etree

XMLDoc = etree.parse('example.xml')

rootXMLElement = XMLDoc.getroot()

tree = etree.parse('example.xml)

import os

for Node in XMLDoc.xpath('//*'):

if os.path.basename(XMLDoc.getpath(Node)) == "SiblingOneA":

if Node.getnext() is not None:

if Node.getnext().tag == "SiblingTwoA":

#RETRIEVE ALL THE CHILDREN ELEMENTS OF THAT SPECIFIC SiblingTwoA NODE AND THEIR VALUES

As you may have deduced from my above code, I do not know what to put in place of the comment to retrieve all the children elements and values of the "SiblingTwoA" node. Also, this code should not return all the children elements of the SiblingTwoA nodes in the whole tree structure, but just of the one in question (i.e. the one returned from the Node.getnext() element). You will also have noticed that many of the elements are the same, but their values are different.

EDIT:

I have been able to retrieve the children of the element in question using Node.getnext().getchildren(). However, this returns the information in the form of a list, such as:

[, ]

[, ]

[, ]

How can I retrieve the actual values within the elements?

My desired output, for the first iteration for example, would be something like:

ChildOneA = Value of child one A

ChildTwoA = Value of child two A

解决方案

I think to generate a simple list (['Value of child one A', 'Value of child two A', 'This is a different value for Child one A', 'This is a different value for Child Two A', 'A final value for Child one A', 'A final value for Child one A']) you can use

[child.xpath('string()') for sibling in doc.xpath('//SiblingTwoA[preceding-sibling::*[1][self::SiblingOneA]]') for child in sibling.xpath('*')]

to generate a nested list ([['Value of child one A', 'Value of child two A'], ['This is a different value for Child one A', 'This is a different value for Child Two A'], ['A final value for Child one A', 'A final value for Child one A']]) you can use

[[child.xpath('string()') for child in sibling.xpath('*')] for sibling in doc.xpath('//SiblingTwoA[preceding-sibling::*[1][self::SiblingOneA]]')]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值