使用lxml etree根据条件循环遍历xml文件

1 投票
1 回答
1036 浏览
提问于 2025-04-17 03:02

我想知道在lxml库中,是否可以把条件语句和tree.findall("...")结合起来使用?

我在一个文件里有以下的xml结构:

    <sss version="1.2">
    <date>2011-09-23</date>
    <time>12:32:29</time>
    <origin>OPST</origin>
    <user></user>
    <survey>
        <name>Test</name>
        <version>2011-09-02 15:50:10</version>
        <record ident="A">
            <variable ident="10" type="quantity">
                <name>no_v</name>
                <label>Another question</label>
                <position start="23" finish="24"/>
                <values>
                    <range from="0" to="32"/>
                </values>
            </variable>
            <variable ident="11" type="quantity">
                <name>v_683</name>
                <label>another totally another Question</label>
                <position start="25" finish="26"/>
                <values>
                    <range from="0" to="33"/>
                </values>
            </variable>
            <variable ident="12" type="quantity">
                <name>v_684</name>
                <label>And once more Question</label>
                <position start="27" finish="29"/>
                <values>
                    <range from="0" to="122"/>
                </values>
            </variable>
            <variable ident="20" type="single">
                <name>v_684</name>
                <label>Question with alternatives</label>
                <position start="73" finish="73"/>
                <values>
                    <range from="1" to="6"/>
                    <value code="1">Alternative 1</value>
                    <value code="2">Alternative 2</value>
                    <value code="3">Alternative 3</value>
                    <value code="6">Alternative 4</value>
                </values>
            </variable>
        </record>
    </survey>
</sss>

我现在想做的是,如果名称以"v_"开头,就只获取survey/record/variable/name .text和survey/record/variable/values/value .text。

到目前为止,我已经得到了第一部分:

from lxml import etree as ET
tree = ET.parse('scheme.xml')
[elem.text for elem in tree.getiterator(tag='name') if elem.text.startswith('v_')]

但是我该如何获取同一个元素的survey/record/variable/values/value .text,并且用survey/record/variable/name .text作为过滤条件呢?非常感谢!

1 个回答

暂无回答

撰写回答