搜索特定的XML元素属性值

2024-09-29 00:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python ElementTree构造和编辑测试消息:

XML的一部分如下:

<FIXML>
<TrdMtchRpt TrdID="$$+TrdID#" RptTyp="0" TrdDt="20120201" MtchTyp="4" LastMkt="ABCD" LastPx="104.11">

TrdID包含以$$开头的值,以标识该值是可变数据,并且在从模板构造消息后需要对其进行修改,在本例中是下一个序列号(存储在字典中)的总体思想是从一个文件中加载一个字典,其中列出了属性键和相关联的值,例如下一个序列号,例如字典文件包含$$+TrdID# 12345,使用空格作为分隔符)。在

到目前为止,我的脚本迭代已解析的XML并依次检查每个索引元素。xml文件中有几个字段需要更新,所以我需要避免对元素标记使用硬编码引用。在

如何搜索元素/属性以确定该属性是否包含相应值以开头的键或包含特定字符串$$?在

由于我不知道的原因,我们不能使用lxml!在


Tags: 文件消息元素编辑字典属性xml序列号
2条回答

您可以使用XPath。在

import lxml.etree as etree
import StringIO from StringIO

xml = """<FIXML>
           <TrdMtchRpt TrdID="$$+TrdID#"
                       RptTyp="0"
                       TrdDt="20120201"
                       MtchTyp="4"
                       LastMkt="ABCD"
                       LastPx="104.11"/>
         </FIXML>"""

tree = etree.parse(StringIO(xml))

要查找元素TrdMtchRpt,其中属性TrdID$$开头:

^{pr2}$

如果要找到任何元素,其中至少有一个属性以^{开头,则可以执行以下操作:

r = tree.xpath("//*[starts-with(@*, '$$')]")
r[0].tag == 'TrdMtchRpt'
r[0].get("TrdID") == '$$+TrdID#'

查看文档:

您可以使用ElementTree包。它为您提供了一个具有XML文档的分层数据结构的对象。在

相关问题 更多 >