Skip to main content
 首页 » 编程设计

python之解析 : String to XML

2025年05月04日31mate10pro

我的 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())