使用 Python 和 lxml 来解析 xml 文档并将元素写入文本文件

Use Python with lxml to parse a xml document and write elements into a text file

使用以下 Python 代码我想解析一个 xml 文件。您可以在代码下方看到 xml 文件的摘录。我需要 "extract" 后面的所有内容 "inv: name =" 就像在这种情况下 "'datasource roof height' and (value = 1000 or value = 2000 or value = 3000 or value = 4000 or value = 5000 or value = 6000)”。有任何想法吗?

我的 Python 代码(到目前为止):

from lxml import etree
doc = etree.parse("data.xml")
for con in doc.xpath("//specification"):
    for cons in con.xpath("./@body"):
        with open("output.txt", "w") as cons_out:
            cons_out.write(cons)
        cons_out.close()

xml 文件的一部分:

<ownedRule xmi:type="uml:Constraint" xmi:id="EAID_OR000004_EE68_4efa_8E1B_8DDFA8F95FB8" name="datasource roof height">
    <constrainedElement xmi:idref="EAID_94F3B0A6_EE68_4efa_8E1B_8DDFA8F95FB8"/>
    <specification xmi:type="uml:OpaqueExpression" xmi:id="EAID_COE000004_EE68_4efa_8E1B_8DDFA8F95FB8" body="inv: name = 'datasource roof height'  and (value = 1000 or value = 2000 or value = 3000 or value = 4000 or value = 5000 or value = 6000)"/>
</ownedRule>

XML 解析器理解属性和元素。 XML 解析器不关心这些属性或元素中存在的内容(文本内容)。

为了解决您的问题,您需要拆分从 body 属性中检索到的字符串。当然,我假设所有元素的 body 属性都具有相同的格式内容,即 "inv : name = some content"

from lxml import etree
doc = etree.parse("data.xml")
for con in doc.xpath("//specification"):
    for cons in con.xpath("./@body"):
        with open("output.txt", "w") as cons_out:
            content = cons.split("inv: name =")[1]
            cons_out.write(content)
        cons_out.close()