python - 解析 : String to XML

标签 python xml xml-parsing elementtree

我的 API 应该接受一个字符串并将其转换为 XML 格式。

但我一直收到这个错误:

ParseError: mismatched tag: line 1, column 764

XML

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetails IssuerId="5" Version="12.2">
    <XMLRequest />
    <BookingDetails  Amount="768"  Comment="Hotel Travel Purchase"  CurrencyCode="INR"  PurchaseType="Hotel"  SupplierName="SomeHotel"  CardAlias="C_ALIAS"  ValidFor="-1D"  CurrencyType="B" />
    <CDFs>
        <CDF FieldName="Order Date" FieldValue="2015-01-01" />
    </CDFs>
    <SomeTag>
        <Rule Action="A" Alias="MyAlias">
            <Controls>
                <OPMCCControl Negate="False"/>
                <OPMIDControl />
                <SomeControlsTags       CumulativeLimit="768"       MaxTrans="None"                 Period="C" />
                <ValidityPeriod           ValidFrom="2015-01-01 00:00:00.0 +0000"          ValidTo="2015-01-11 00:00:00.0 +0000" />
            </Controls>
        </Rule>
    </SomeTag>
</BookingDetails>
<Email  EmailAddress="T@J.COM"/>
<MasterDetails />

实现方式:

tree = ET.ElementTree(ET.fromstring(kk.strip()))

我确定我的 XML 字符串包含所有匹配的标签并且已格式化,但我眼前可能仍然缺少某些东西!!

最佳答案

BookingDetails标签在这一行自动关闭:

<BookingDetails  Amount="768"  Comment="Hotel Travel Purchase"  CurrencyCode="INR"  PurchaseType="Hotel"  SupplierName="SomeHotel"  CardAlias="C_ALIAS"  ValidFor="-1D"  CurrencyType="B" />

但是当有单独关闭的时候BookingDetails元素:

</BookingDetails>

另外,<MasterDetails />在最后一行没有正确关闭。应该是</MasterDetails>而不是 <MasterDetails /> .


请注意,您可以在 "recover" mode 中解析此 XML如果lxml.etree使用:

import lxml.etree as ET

parser = ET.XMLParser(recover=True)
tree = ET.ElementTree(ET.fromstring(data, parser=parser)) 

或者,使用 BeautifulSoup xml特点:

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, "xml")
print(soup.prettify())

关于python - 解析 : String to XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893010/

相关文章:

python - 一个简单的 python 程序无法访问我的 dll

c# - 获取Python可执行文件路径

c++ - QXmlStreamReader读取空文本,文档肯定不为空

java - 使用 Java 读取一个标签中包含多个值的 XML 文件

android - 未检测到文档 (Android) 的语法约束(DTD 或 XML 模式)

python - 从 Cleverhans 攻击模型生成对抗数据

python - `for a[x] in a` 在 Python 中是什么意思?

php - 如何用php验证xml

android - 使用 x.509 android 对 XML 进行签名

java - 读取具有多个子节点的xml文件