2016-01-20 131 views
1

我的API應該採取一個字符串並將其轉換爲XML格式。解析:字符串到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="[email protected]"/> 
<MasterDetails /> 

通過實現:

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

我知道肯定是我的XML字符串含所有匹配的標籤,並格式化,但仍然可能會失去我眼前的東西!

+0

「我肯定知道,我的XML字符串包含所有匹配的標籤,並且格式爲「如果您實際上通過XML驗證程序運行了我,您會發現情況並非如此。 – M4rtini

+0

@ M4rtini:我實際上是通過http://www.webtoolkitonline.com/xml-formatter.html格式化它,它形成得很好......所以這是一個假設!此外,它的縮小版本的一個非常大的XML :) – NoobEditor

回答

3

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 />


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

import lxml.etree as ET 

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

或者,使用BeautifulSoupxml特點:

from bs4 import BeautifulSoup 

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

該死的人.....螺絲遺留系統.... JSONs是如此多好! :D – NoobEditor

+0

@NoobEditor我們過去會打獵我們很久,準備好了:D – alecxe

+0

哈哈......不能同意更多......爲思念歡呼!! :) – NoobEditor