JMS反序列化与XML列表,的XPath的SimpleXMLElement不工作
我试图反序列化这个XMLJMS反序列化与XML列表,的XPath的SimpleXMLElement不工作
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<InformationDisclosureResponse xmlns="http://ASD.pl">
<DisclosureReport>
<Number>U/123</Number>
<Created>2017-10-03T15:00:50+02:00</Created>
<SearchCriterion>
<NonConsumerIdentityNumber>
<TaxId>123123123</TaxId>
</NonConsumerIdentityNumber>
<AuthorizationDateSpecified>false</AuthorizationDateSpecified>
<ActAuthorizationDateSpecified>false</ActAuthorizationDateSpecified>
<SearchType>RegularSearch</SearchType>
<SearchCriterionType>TaxId</SearchCriterionType>
</SearchCriterion>
<Requester>
<LegalPerson>
<Name>Test</Name>
<IdentityNumber>
<TaxId>123123123</TaxId>
</IdentityNumber>
<SeatAddress>
<Line>asd 72</Line>
</SeatAddress>
</LegalPerson>
<LoginFullName>ASD</LoginFullName>
</Requester>
<Summary>
<InformationCount>2</InformationCount>
<TotalArrears>
<Amount>123321.52</Amount>
<Currency>PLN</Currency>
</TotalArrears>
</Summary>
<PositiveInformationSummary>
<ProvidersCount>0</ProvidersCount>
</PositiveInformationSummary>
<Report>
<ObligationInformations>
<ObligationInformation category="0">
<Debtor>
<Entrepreneur>
<Name>ASDASD</Name>
<AddressForMail>
<Line>ASD ASD</Line>
</AddressForMail>
<SeatAddress>
<Line>ASD123</Line>
</SeatAddress>
<NonConsumerIdentityNumber>
<TaxId>123123123</TaxId>
</NonConsumerIdentityNumber>
<FirstName>ASD</FirstName>
<Surname>ASD</Surname>
</Entrepreneur>
</Debtor>
<Provider>
<LegalPerson>
<Name>ASD</Name>
<IdentityNumber>
<TaxId>123123123</TaxId>
</IdentityNumber>
<SeatAddress>
<Line>Asd, asd</Line>
</SeatAddress>
<RegistrationNumber>123123</RegistrationNumber>
<RegistryName>ASD</RegistryName>
<Regon>123123</Regon>
<Ekd>123S/07</Ekd>
</LegalPerson>
</Provider>
<Title>Fd-dasd</Title>
<Type>Invoice</Type>
<PaymentDate>2017-04-20T00:00:00+02:00</PaymentDate>
<NoObjections>true</NoObjections>
<CallSent>2017-05-29T00:00:00+02:00</CallSent>
<Debt>
<Amount>123.80</Amount>
<Currency>PLN</Currency>
</Debt>
<Arrears>
<Amount>321.80</Amount>
<Currency>PLN</Currency>
</Arrears>
</ObligationInformation>
</ObligationInformations>
</Report>
</DisclosureReport>
</InformationDisclosureResponse>
</s:Body>
带班
class ReportResponse{
/**
* @var DisclosureReport
*
* @JMS\Type("DisclosureReport")
* @JMS\SerializedName("DisclosureReport")
*/
public $disclosureReport;
//geter
}
。
class DisclosureReport{
/**
* @var string|null
*
* @JMS\Type("string")
* @JMS\SerializedName("Number")
*/
public $number;
/**
* @var string|null
*
* @JMS\Type("string")
* @JMS\SerializedName("Created")
*/
public $created;
/**
* @var SearchCriterion|null
*
* @JMS\Type("SearchCriterion")
* @JMS\SerializedName("SearchCriterion")
*/
public $searchCriterion;
/**
* @var Requester|null
*
* @JMS\Type("Requester")
* @JMS\SerializedName("Requester")
*/
public $requester;
/**
* @var Summary|null
*
* @JMS\Type("Summary")
* @JMS\SerializedName("Summary")
*/
public $summary;
/**
* @var PositiveInformationSummary|null
*
* @JMS\Type("PositiveInformationSummary")
* @JMS\SerializedName("PositiveInformationSummary")
*/
public $positiveInformationSummary;
/**
* @var Report|null
*
* @JMS\Type("Report")
* @JMS\SerializedName("Report")
*/
public $report;
//geters
}
。
class Report{
/**
* @var ArrayCollection|null
*
* @JMS\Type("ArrayCollection<ObligationInformation>")
* @JMS\SerializedName("ObligationInformations")
* @JMS\XmlList(entry="ObligationInformation")
*/
public $obligationInformations;
/**
* @var ArrayCollection|null
*
* @JMS\Type("ArrayCollection<PaidObligationInformation>")
* @JMS\SerializedName("PaidObligationInformations")
* @JMS\XmlList(entry="PaidObligationInformation")
*/
public $paidObligationInformations;
}
解析的每一件事情都可以,但是带有ObligationInformation的ArrayCollection不会。即使使用array
类型,仍然获得空ArrayCollection。
尝试不使用属性类别,使用JMS/Serializer-bundle
(当前我使用1.1.0
,使用jms/serializer 1.5.0
)的不同版本,但没有成功。
调试时我发现这里有https://github.com/schmittjoh/serializer/blob/1.5.0/src/JMS/Serializer/XmlDeserializationVisitor.php#L158我得到空数组。 $entityName
是ObligationInformation
,像这里http://sandbox.onlinephpfunctions.com/code/9f6213c5937f8e1cc78e46c710ae1a0f009338d5在沙箱PHP中,但在这里我得到的数据。
什么时候在我的应用程序的沙箱中做什么,结果与沙箱中的相同。但是在这个带有$data
这个JMS文件的沙盒$xml
中,我得到空数组为什么?
你的问题是你有错误的XML名称空间定义在<InformationDisclosureResponse xmlns="http://ASD.pl">
元素。尝试没有它的反序列化,它应该做的伎俩。
我发现这个问题的临时解决方案。
在JMS标签XmlList
定义enrty为child::*
现在它看起来像:
@JMS\XmlList(entry="child::*")
和它的作品!但它的工作..但仍然..
此命名空间故意改变,但我忘了在课堂上改变它。我使用正确的命名空间,所以它没有解决我问题Siadul。 –