我有两个xml,expect和actual列表。 对于预期列表中的每个预期列表,我想将其与每个实际值进行比较,并找出是否与实际列表中的任何xml匹配。
每个mesg如下所示:
<?xml version="1.0" encoding="utf-8"?>
\n
<stlTxn>
<InstrumnetID>796</InstrumnetID>
<Version>0</Version>
<ProductType>OSTK</ProductType>
<Strike>190.0</Strike>
<AccountID>3236</AccountID>
<Symbol>ALV</Symbol>
<SettlAmount>1520000.0</SettlAmount>
<ClearingBusinessDate>2013-12-18</ClearingBusinessDate>
<CptySettlAccount>8501</CptySettlAccount>
<ProductISIN>DE00004005</ProductISIN>
<ProductCurrency>EUR</ProductCurrency>
<SettlCurrency>EUR</SettlCurrency>
<AccrIntAmount>0.0</AccrIntAmount>
<SettlQuantity>8000.0</SettlQuantity>
<AccountSponsor>CBKFR</AccountSponsor>
<CallPut>0</CallPut>
<DelvSettlPrice>190.0</DelvSettlPrice>
<AccountName>EXY</AccountName>
<CashSettlAmount>0.0</CashSettlAmount>
<Maturity>201312</Maturity>
<Side>0</Side>
<ClearingHouse>ECAG</ClearingHouse>
<AccrIntDays>0</AccrIntDays>
<DeliveryType>DELIVERY_AT_SETTLEMENT_AMOUNT</DeliveryType>
<ProductName>OPT ON ALLIANZ AG HOLDIN</ProductName>
<ProductSymbol>ALV</ProductSymbol>
<Currency>EUR</Currency>
<AccountOwner>CBKFR</AccountOwner>
<ValueDate>2013-12-20</ValueDate>
<ProductID>jigfj</ProductID>
</stlTxn>
我尝试使用美丽的汤包:
from bs4 import BeautifulSoup
expected_parsed = BeautifulSoup(expected)
actual_parsed = BeautifulSoup(actual)
if expected_parsed.text != actual_parsed.text:
print "failed"
答案 0 :(得分:0)
这个问题比起初看起来更棘手,因为元素的年表可以改变,以及层次结构。您只想比较类似的XML文档。我建议你看一下lxml模块,然后依次解析第一个XML和每个标签检查,看看第二个A:是否有相同的标签B:具有相同的标签值,C:具有相同的属性。
如果您能够假设两个XML文档将始终具有相同的元素和相同的层次结构,那么您可能会发现以下有趣的内容......
from lxml import etree
import os
def compareXMLs( xmlFilePath1, xmlFilePath2 ):
if not os.path.isfile( xmlFilePath1 ):
raise Exception( "Invalid file path: \'" + str(xmlFilePath1) + "\'" )
if not os.path.isfile( xmlFilePath1 ):
raise Exception( "Invalid file path: \'" + str(xmlFilePath2) + "\'" )
xmlDoc1 = etree.parse( xmlFilePath1 )
xmlDoc2 = etree.parse( xmlFilePath2 )
if set( xmlDoc1.getroot().itertext() ) == set( xmlDoc2.getroot().itertext() ):
return True
return False
这是我的第二个堆栈溢出帖子,请原谅我,如果这是一个垃圾回答。 哦,我从来没有尝试过,但我认为etree.parse()方法也可以采用HTTP / FTP URL。 祝你好运!