python - Reg 将数据添加到 Python 中的现有 XML

标签 python xml parsing

我必须使用 Python 解析 xml 文件并修改特定标记中的数据。我正在使用元素树来做到这一点。我能够解析并达到所需的标签。但我无法修改该值。我不确定 Element Tree 是否可以,或者我是否应该使用 TreeBuilder 来实现此目的。

正如您在下面看到的,我只想将 Verdict 下的“Not Executed”替换为字符串值。

-<Procedure> 
    <PreCondition>PRECONDITION: - ECU in extended diagnostic session (zz = 0x03)     </PreCondition>
    <PostCondition/> 
    <ProcedureID>428495</ProcedureID> 
    <SequenceNumber>2</SequenceNumber>
    <CID>-1</CID> 
    <**Verdict** Writable="true">NotExecuted</Verdict>  
</Procedure>

import xml.etree.ElementTree as etree

X_tree = etree.parse('DIAGNOSTIC SERVER.xml')
X_root = X_tree.getroot()

ATC_Name = X_root.iterfind('TestOrder//TestOrder//TestSuite//')

try:
    while(1):
        temp = ATC_Name.next()              
        if temp.tag == 'ProcedureID' and temp.text == str(TestCase_Id[j].text).split('-')[1]:
            ATC_Name.next()
            ATC_Name.next()
            ATC_Name.next().text = 'Pass' <--This is what I want to do   
            ATC_Name.close()
            break
except:
            print sys.exc_info()

我相信我的方法是错误的。请用正确的指点指导我。 谢谢。

最佳答案

您最好切换到lxml这样您就可以使用 xpath 的“无限”力量。

这个想法是使用以下xpath表达式:

//Procedure[ProcedureID/text()="%d"]/Verdict

其中 %d 占位符通过 string formatting operation 替换为适当的过程 ID .

xpath 表达式找到适当的 Verdict 标记,您可以在其上设置 text:

from lxml import etree

data = """<Procedure>
    <PreCondition>PRECONDITION: - ECU in extended diagnostic session (zz = 0x03)     </PreCondition>
    <PostCondition/>
    <ProcedureID>428495</ProcedureID>
    <SequenceNumber>2</SequenceNumber>
    <CID>-1</CID>
    <Verdict Writable="true">NotExecuted</Verdict>
</Procedure>"""

ID = 428495
tree = etree.fromstring(data)
verdict = tree.xpath('//Procedure[ProcedureID/text()="%d"]/Verdict' % ID)[0]
verdict.text = 'test'

print etree.tostring(tree)

打印:

<Procedure>
    <PreCondition>PRECONDITION: - ECU in extended diagnostic session (zz = 0x03)     </PreCondition>
    <PostCondition/>
    <ProcedureID>428495</ProcedureID>
    <SequenceNumber>2</SequenceNumber>
    <CID>-1</CID>
    <Verdict Writable="true">test</Verdict>
</Procedure>

关于python - Reg 将数据添加到 Python 中的现有 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224088/

相关文章:

python - 在每个 for 循环迭代中遍历列表

python - 在同一请求中使用 Django 测试客户端发布多个文件

c# - 在不知道确切结构的情况下计算大量嵌套的 XmlNodes

Ruby:如何将多线程合并到这个网络抓取场景中?

java - 更多条件下XPath Java解析xml文档

python - 如何使用 python 打开 SSH 隧道?

python - 如何将 MySQL SOUNDEX 函数与 SQLAlchemy 结合使用

appengine 上对象的 python 序列化

xml - 我如何在 xquery 中拥有计数器?

parsing - 解析shell脚本中的URL