来自python的ElementTree找不到子标签。

问题描述 投票:0回答:1

我正试图从一个叫做 XML 文件从 PythonElementTree,却找不到它。

XML代码。

<item>
        <id>12345678</id>
        <subs>
            <sub category="A">
                <name>Name 1 text</name>
                <file>File 1 text</file>
            </sub>
            <sub category="B">
                <name>Name 2 text</name>
                <file>File 2 text</file>
            </sub>
        </subs>
        <number>Number text</number>
        <title>Title text</title>
</item>

我想读取 file 标签文本。

Python代码。

import urllib2
import ElementTree as ET

root = ET.ElementTree(file=urllib2.urlopen('http://..../filename.jsp?id=12345678')).getroot()

if __name__ == '__main__':
    for subtags in root.findall('sub'):
        filetext = subtags.find('file').text
        print(filetext)

输出应该是这样的

> File 1 text
> File 2 text

但是,我得到的输出是什么都没有(空白),然后,10秒钟后,程序停止运行,没有得到任何错误。

我已经尝试过用其他的标签,如 XML行得通.

谢谢。

python python-3.x xml urllib2 elementtree
1个回答
1
投票

findall 如果你给了它标签名,则只查找直系子孙。

你可以用 XPath 这样的查询。

root.findall('.//sub')

0
投票

试试这个,仅供参考

from simplified_scrapy import SimplifiedDoc,utils,req
html = '''<item>
        <id>12345678</id>
        <subs>
            <sub category="A">
                <name>Name 1 text</name>
                <file>File 1 text</file>
            </sub>
            <sub category="B">
                <name>Name 2 text</name>
                <file>File 2 text</file>
            </sub>
        </subs>
        <number>Number text</number>
        <title>Title text</title>
</item>'''
doc = SimplifiedDoc(html)
files = doc.selects('sub').file.text
print(files)

结果:

['File 1 text', 'File 2 text']
© www.soinside.com 2019 - 2024. All rights reserved.