将xml反序列化为由特殊字符分割的不需要的对象的问题

2024-04-29 10:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将xml反序列化为对象,但遇到了xml树中各种项的编码问题。在

XML示例:

<?xml version="1.0" encoding="utf-8"?>
<results>
  <FlightTravel>
    <QuantityOfPassengers>6</QuantityOfPassengers>
    <Id>N5GWXM</Id>
    <InsuranceId>330992</InsuranceId>
    <TotalTime>3h 00m</TotalTime>
    <TransactionPrice>540.00</TransactionPrice>
    <AdditionalPrice>0</AdditionalPrice>
    <InsurancePrice>226.56</InsurancePrice>
    <TotalPrice>9561.31</TotalPrice>
    <CompanyName>XXXXX</CompanyName>
    <TaxID>111-11-11-111</TaxID>
    <InvoiceStreet>Jagiellońska</InvoiceStreet>
    <InvoiceHouseNo>8</InvoiceHouseNo>
    <InvoiceZipCode>Jagiellońska</InvoiceZipCode>
    <InvoiceCityName>Warszawa</InvoiceCityName>
    <PayerStreet>Jagiellońska</PayerStreet>
    <PayerHouseNo>8</PayerHouseNo>
    <PayerZipCode>11-111</PayerZipCode>
    <PayerCityName>Warszawa</PayerCityName>
    <PayerEmail>no-reply@xxxx.pl</PayerEmail>
    <PayerPhone>123123123</PayerPhone>
    <Segments>
      <Segment0>
        <DepartureAirport>WAW</DepartureAirport>
        <DepartureDate>śr. 06 lip</DepartureDate>
        <DepartureTime>07:50</DepartureTime>
        <ArrivalAirport>VIE</ArrivalAirport>
        <ArrivalDate>śr. 06 lip</ArrivalDate>
        <ArrivalTime>09:15</ArrivalTime>
      </Segment0>
      <Segment1>
        <DepartureAirport>VIE</DepartureAirport>
        <DepartureDate>śr. 06 lip</DepartureDate>
        <DepartureTime>10:00</DepartureTime>
        <ArrivalAirport>SZG</ArrivalAirport>
        <ArrivalDate>śr. 06 lip</ArrivalDate>
        <ArrivalTime>10:50</ArrivalTime>
      </Segment1>
    </Segments>
  </FlightTravel>
</results>

python中的XML反序列化函数:

^{pr2}$

输出:

['6'、'N5GWXM'、'330992'、'3h 00m'、'540.00'、'0'、'226.56'、'9561.31'、'XXXXX'、'111-11-111'、'Jagiello'、'N'、'ska'、'不回复@xxxx.pl','123123123','WAW',',‘r.06唇口’,‘10:00’,‘SZG’,‘ś’,‘r.06 lip’,‘10:50’]

在项目“jagiellon揗ska”中是特殊字符“n”。当解析器将数据追加到数组中时,char'是一种分裂字符,我的问题是为什么会发生这种情况?其余项将正确附加到数组。在“śr06.lip”项中,情况完全相同。在


Tags: 序列化xmlresultsskalipdeparturetimearrivaltimearrivaldate
1条回答
网友
1楼 · 发布于 2024-04-29 10:38:40

问题是目标类的data方法可能会被每个元素多次调用。例如,如果进料器穿过块边界,可能会发生这种情况。看起来当它碰到非ASCII字符时也可能发生。这是古老的传说。我找不到文件记载的地方。但是,如果您将目标类更改为如下所示的类,它将起作用。我已经用你的数据测试过了。在

class TitleTarget(object):
    def __init__(self):
        self.text = []
    def start(self, tag, attrib):
        self.is_title = True #if tag == 'Title' else False
        if self.is_title:
            self.text.append(u'')
    def end(self, tag):
        pass
    def data(self, data):
        if self.is_title:
            self.text[-1] += data
    def close(self):
        return self.text

{graph{graph>在你的输出之后做什么更好。现在您应该看到这样一些未拆分的文本

^{pr2}$

相关问题 更多 >