首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xml.etree.ElementTree findall函数返回路径python的空字符串。

xml.etree.ElementTree findall函数返回路径python的空字符串。
EN

Stack Overflow用户
提问于 2020-06-04 10:39:33
回答 1查看 604关注 0票数 0

给定XML为字符串:

代码语言:javascript
运行
复制
xml_as_string = """<root xmlns:SOAP-ENV="http://w/e">
    <Context operation="something.wsdl">
        <SOAP_Version>123.321</SOAP_Version>
        <Namespace xmlns:SOAP-ENV="http://dummy.com"/>
    </Context>
    <Header/>
    <Body>
        <ns2:Complex xmlns:ns2="http://www.test.this/idk">
            <ns2:simple>
                <ns2:child1>IKM</ns2:child1>
                <ns2:child2>1234</ns2:child2>
                <ns2:child3>S</ns2:child3>
            </ns2:simple>
            <ns2:simple>
                <ns2:child1>QEw</ns2:child1>
                <ns2:child2>10028111</ns2:child2>
                <ns2:parentchild1>IKM</ns2:parentchild1>
                <ns2:parentchild2>1234</ns2:parentchild2>
                <ns2:child3>S</ns2:child3>
            </ns2:simple>
            <ns2:simple>
                <ns2:child1>IOW</ns2:child1>
                <ns2:child2>100043896</ns2:child2>
                <ns2:parentchild1>QEw</ns2:parentchild1>
                <ns2:parentchild2>10028111</ns2:parentchild2>
            </ns2:simple>
            <ns2:extra>
                <ns2:childextra>0</ns2:childextra>
            </ns2:extra>
        </ns2:Complex>
    </Body>
</root>
"""

使用xml.etree.ElementTree创建xml树:

代码语言:javascript
运行
复制
`import xml.etree.ElementTree as ET`

root = ET.fromstring(xml_as_string)

对于特定的路径,我试图打印所有找到的值

代码语言:javascript
运行
复制
path = './Body/Complex/simple/child1'

path_vals = root.findall(path)
print([e.text for e in path_vals])

结果是一个空列表:

代码语言:javascript
运行
复制
[]

在python中有什么方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 11:20:54

您可能需要与child1关联的所有文本:您需要使用命名空间来获取数据:"http://www.test.this/idk“是命名空间

代码语言:javascript
运行
复制
namespace = '{http://www.test.this/idk}'

[ent.text for ent in root.findall(F".//{namespace}child1")]

['IKM', 'QEw', 'IOW']

如果您想取消名称空间,可以让帕塞尔试一试:

代码语言:javascript
运行
复制
from parsel import Selector
selector = Selector(xml_as_string, 'xml')

#remove namespace
selector.remove_namespaces()

#get your required text
selector.xpath(".//child1/text()").getall()

['IKM', 'QEw', 'IOW']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62192631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档