使用BeautifulSoup解析包含冒号的XML

时间:2019-02-22 14:19:20

标签: python xml python-3.x beautifulsoup xml-parsing

我在解析使用BeautifulSoup获得的XML方面有些费力,尽管我已经阅读了文档,但似乎无法使其与XML的设置方式一起正常工作。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xml" href="/static/atom.xsl"?>
<feed xmlns:s="server url here">
    <!-- Feed elements>
    <entry>
        <!-- Other Elements -->
        <content type="text/xml">
            <s:dict>
                <!-- Other keys. -->
                <s:key name="sid">DATA I WANT HERE</s:key>
                <!-- Other keys. -->
            </s:dict>
            <!-- Lots of other dicts here. -->
        </content>
    </entry>
    <! -- Other entries -->
</feed>

我的目标是从属性为s:key且值为name的所有sid获取数据。 (即,所有s:key都有一个name,但每个<entry>中只有一个属于sid类型。

如何在数据中打印出s:key类型的相关sid之间的所有文本?

我尝试过的是:

print(tree.findAll('key', {'name'}))

以及:

for elem in tree.feed.entry.content.dict.key:
    print(elem)

但是很明显,这些是有缺陷的,不能按我希望的那样正常工作。

我如何完成我想要获得的东西?

1 个答案:

答案 0 :(得分:1)

尝试以下代码:

soup = bs4.BeautifulSoup(html_doc, 'lxml')
elements = soup.findAll("s:key", {"name" : "sid"})
for lele in elements:
    print(lele.text)

输出:-

DATA I WANT HERE