Python 控制搜索深度findall Lxml

Python 控制搜索深度findall Lxml,python,xml,xml-parsing,lxml,Python,Xml,Xml Parsing,Lxml,我是Python初学者,尝试在Python中使用LXML解析XML。我试图使用finall()搜索标记,但希望控制搜索标记的深度,但搜索不超过一个级别。解释如下: <?xml version='1.0' encoding='utf-8'?> <system xmlns="some_name_space"> <a> <host>Random Name</host> <class> <nam

我是Python初学者,尝试在Python中使用LXML解析XML。我试图使用finall()搜索标记,但希望控制搜索标记的深度,但搜索不超过一个级别。解释如下:

<?xml version='1.0' encoding='utf-8'?>
<system xmlns="some_name_space">
<a>
    <host>Random Name</host>
    <class>
        <name>Main_Tag_1</name>
        <detail>
            <name>Child_Tag_1</name>
            <ip>ip_1</ip>
            <port>port_1</port>
        <detail>
    </class>
    <class>
        <name>Main_Tag_2</name>
        <detail>
            <name>Child_Tag_2</name>
            <ip>ip_2</ip>
            <port>port_2</port>
        <detail>
    </class>
    <class>
        <name>Main_Tag_3</name>
        <detail>
            <name>Child_Tag_3</name>
            <ip>ip_3</ip>
            <port>port_3</port>
        <detail>
    </class>
</a>
现在,我得到的输出是

{'Main_Tag_1': ['ip_1'], 'Child_tag_1': ['ip_1'], 'Main_Tag_2': ['ip_2'], 'Child_tag_1': ['ip_2']} and so on..
但我只想得到第一个父项,即Main_标记1、2或3以及ip标记中的文本

{'Main_Tag_1': ['ip_1'], 'Main_Tag_2': ['ip_2']} and so on..
这让我觉得有必要控制findall的深度,但我还没能在web上找到任何与深度相关的东西

请让我知道是否已经有这样的用例,以及实现这一点的最佳方法是什么

如果您只想在直接子元素(不包括父子元素和更深的子元素)中搜索,请使用单斜杠(
/
):


请注意,当您需要支持更高级的XPath表达式时,请使用
lxml
的方法,而不是
findall()
。后者只支持大量XPath表达式。

感谢@har07的建议,我将对此进行探讨。你给出的解决方案是完美的!可能有点脱离上下文。但是我如何在findall中搜索多个标记呢。我在网上读到它,似乎findall(“./{some_name_space}(tag1 | tag2))”应该有用,但它对我没用。因此,检查专家建议。
{'Main_Tag_1': ['ip_1'], 'Main_Tag_2': ['ip_2']} and so on..
name_tag = elem.findall("./{some_name_space}name")