使用XPath的pythonxml过滤

2024-05-14 23:01:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着让这玩意儿运转起来。我有一个XML文件,需要使用XPath过滤元素“title”。之后,我需要将C元素下的所有内容复制到外部文件中,但现在不是重点。我需要用xml.etree.cElementTree或者xml.etree.ElementTree. 我已经在stackoverflow和其他网站上读了很多帖子,结果被卡住了。 秀。。首先是XML结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<delivery xmlns="http://url" publicationdate="2013-08-28T09:10:32Z">
    <A>
        <B>
            <C>
                <Cid>XXXXXXXXX</Cid>
                <cref>111111-2222222</cref>
                <D>
                    <E/>
                    <F/>
                    <G/>
                    <H>
                        <Href>XXXXXXXXXXXX</Href>
                        <hcont name="XXXXXX" country="EN"/>
                    </H>
                    <I/>
                    <J/>
                    <K>XXXXXXXXX</K>
                    <oldK>XXXXXXX</oldK>
                    <title>
                        <content lang="en">TITLE</content>
                    </title>
                    <L>
                        <isL>false</isL>
                    </L>
                </D>
                <M>
                    <startTime>2013-08-28T03:00:00Z</startTime>
                    <endTime>2013-08-29T00:58:00Z</endTime>
                </M>
            </C>
        </B>
    </A>
</delivery>

我甚至不能通过XPath找到Cid元素。脚本一直返回“None”或[]或什么都不返回。在

^{pr2}$

这个没有回报。如何让它工作?如何“找到”哪怕是Cid元素?在


Tags: 文件元素titlexmlcontentxpathetreehref
1条回答
网友
1楼 · 发布于 2024-05-14 23:01:58

您应该将namespaces参数传递给findall()

namespaces = {name_space_name_here: 'http://url'}
for x in doc.findall('./A/B/C', namespaces=namespaces):
    # do smth

但是,对于默认名称空间,这是行不通的(在您的例子中,只有xmlns)。在

在这种情况下,可以显式地将命名空间传递给xpath:

^{pr2}$

另请参见:

相关问题 更多 >

    热门问题