加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – ElementTree find()/ findall()找不到带命名空间的标

发布时间:2020-12-16 23:21:42 所属栏目:Python 来源:网络整理
导读:如果我指定命名空间,使用以下代码我希望能够搜索目标标记. import xml.etree.ElementTree as ETxml = """?xml version="1.0" encoding="UTF-8"? xyz2:outer xmlns:xyz1="http://www.company.com/url/common/v1" xmlns:xyz2="http://www.company.com/app/v2"
如果我指定命名空间,使用以下代码我希望能够搜索目标标记.
import xml.etree.ElementTree as ET

xml = """<?xml version="1.0" encoding="UTF-8"?>
         <xyz2:outer xmlns:xyz1="http://www.company.com/url/common/v1"
                     xmlns:xyz2="http://www.company.com/app/v2"
                     version="9.0"
                     something="false">
             <xyz2:inner>
                 <xyz2:target>
                     <xyz1:idType>name</xyz1:idType>
                     <xyz1:id>A Name Here</xyz1:id>
                 </xyz2:target>
             </xyz2:inner>
         </xyz2:outer>"""

tree = ET.fromstring(xml)

print tree[0][0]
# <Element '{http://www.company.com/app/v2}target' at 0x7f3c294374d0>

tree.find('{http://www.company.com/app/v2}target')
# None

无论我做什么,我都无法找到目标标签?

我已经尝试了各种ElementTree实现,包括lxml,据称可以接受{*}命名空间.没有骰子?

解决方法

target不是根元素;你应该在前面.//.
>>> import xml.etree.ElementTree as ET
>>> tree = ET.fromstring(xml)
>>> tree.findall('.//{http://www.company.com/app/v2}target')
[<Element '{http://www.company.com/app/v2}target' at 0x2d143c8>]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读