【发布时间】:2021-01-28 23:18:07
【问题描述】:
请您帮我通过以下 Python 结构访问名为“id”的元素(我有 lxml 和 xml.etree.ElementTree 库)。
理想的结果:'0000000' 理想的方法:
- 在 xml 文档中搜索一个名为 fcsProtocolEF3 的孩子。
- 在 fcsProtocolEF3 中搜索名为“id”的元素。
按元素名称搜索至关重要。不是按序号。
我尝试使用这样的东西:tree.findall('{http://zakupki.gov.ru/oos/export/1}fcsProtocolEF3')[0].findall('{http://zakupki.gov.ru/oos/types/1}id')[0].text
它可以工作,但它需要输入命名空间。 XML 文档有不同的命名空间,我不知道如何事先定义它们。
谢谢。
在 SQL 中使用 XQuery 之类的东西会很棒:
value('(/*:export/*:fcsProtocolEF3/*:id)[1]', 'nvarchar(21)')) AS [id],
XML 文档:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<ns2:export xmlns:ns3="http://zakupki.gov.ru/oos/common/1" xmlns:ns4="http://zakupki.gov.ru/oos/base/1" xmlns:ns2="http://zakupki.gov.ru/oos/export/1" xmlns:ns10="http://zakupki.gov.ru/oos/printform/1" xmlns:ns11="http://zakupki.gov.ru/oos/control99/1" xmlns:ns9="http://zakupki.gov.ru/oos/SMTypes/1" xmlns:ns7="http://zakupki.gov.ru/oos/pprf615types/1" xmlns:ns8="http://zakupki.gov.ru/oos/EPtypes/1" xmlns:ns5="http://zakupki.gov.ru/oos/TPtypes/1" xmlns:ns6="http://zakupki.gov.ru/oos/CPtypes/1" xmlns="http://zakupki.gov.ru/oos/types/1">
<ns2:fcsProtocolEF3 schemeVersion="10.2">
<id>0000000</id>
<purchaseNumber>0000000000000000</purchaseNumber>
</ns2:fcsProtocolEF3>
</ns2:export>
【问题讨论】:
-
请上传一个有效的 xml。当前的无效
-
balderman,谢谢您的回复。我已经在文档中添加了结尾。
-
您当前的解决方案有什么问题?由于 XML 文档基于 NS - 您必须使用它们。不是吗?您希望拥有什么?
标签: python python-3.x xml xml-parsing xquery