如何使用Python解析下面的XML数据?

如何使用Python解析下面的XML数据?,python,python-3.x,xml,lxml,elementtree,Python,Python 3.x,Xml,Lxml,Elementtree,源XML <?xml version='1.0' encoding='UTF-8'?> <ProcessType xmlns:xmi="http://www.omg.org/XMI" xmi:version="2.0" defaultContext="Default"> <node componentName="tRedshiftRow" componentVersion="0.102" offsetLabelX="0" offsetLabelY="0" p

源XML

<?xml version='1.0' encoding='UTF-8'?>
<ProcessType xmlns:xmi="http://www.omg.org/XMI" xmi:version="2.0" defaultContext="Default">
    <node componentName="tRedshiftRow" componentVersion="0.102" offsetLabelX="0" offsetLabelY="0" posX="-32" posY="96">
    <elementParameter field="TECHNICAL" name="QUERYSTORE:QUERYSTORE_TYPE" value="BUILT_IN"/>
    <elementParameter field="TEXT" name="DBNAME" value="&quot;&quot;"/>
    <elementParameter field="TEXT" name="SCHEMA_DB" value="&quot;&quot;"/>
    <elementParameter field="MEMO_SQL" name="QUERY" value="&quot;DELETE FROM schema.tablename;&quot;"/>
    </node>
</ProcessType>

使用
xpath
查询,只需几个语句就可以完成这一切。比如:

>>> from lxml import etree
>>> doc = etree.parse(open('data.xml'))
>>> query = doc.xpath('//elementParameter[@name="QUERY"]')[0].get('value')
>>> print(query)
"DELETE FROM schema.tablename;"
这表示“使用
name=“QUERY”
查找所有
elementParameter
元素,然后返回第一个元素的
value
属性的值


要仅选择那些在其
属性值中包含“DELETE”的元素,请使用
contains()
函数:

>>> doc.xpath('//elementParameter[@name="QUERY" and contains(@value, "DELETE")]')

这在固定场景中起作用。因此,在某些场景中,我有多个name=“QUERY”,它由不同的SQL查询组成。我不提供固定数组位置[0],如何仅使用delete语句搜索值。@awsgeekcode-尝试添加使用
contains()
的谓词。示例:
//elementParameter[@name=“QUERY”][contains(@value,'DELETE')]
@AWSGeekCoder此答案中有代码显示如何打印该值。@AWSGeekCoder-您只需要更新larsks给出的原始答案中的XPath。因此:
query=doc.XPath('//elementParameter[@name=“query”][contains(@value,'DELETE'))[0]。获取('value')
(然后
print(query)
)或者您可以使用larsks给出的第二个xpath。它们是等效的。
>>> doc.xpath('//elementParameter[@name="QUERY" and contains(@value, "DELETE")]')