XML-файл загрузки с PHP

0

Я не уверен, что я делаю неправильно, но я просто не могу загрузить XML с моим PHP правильно. Я пробую его с загрузочным документом и simplexml_load_file и так далее, но я все время получаю ошибку.

Пример кода:

$xnl_file = "xml.xml";
$xml = simplexml_load_file($xnl_file);
var_dump($xml);

Ошибка:

Warning: simplexml_load_file(): xml.xml:3: parser error : Extra content at the end of the document in C:\xampp\htdocs\xampp\provisioning\index.php on line 3

Warning: simplexml_load_file(): <PartnershipList xmlns="http://www.audatex.com/SAXIF"> in C:\xampp\htdocs\xampp\provisioning\index.php on line 3

Warning: simplexml_load_file(): ^ in C:\xampp\htdocs\xampp\provisioning\index.php on line 3
bool(false)

XML выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<CreationDateTime>Wed Nov 05 12:30:38 CET 2014</CreationDateTime>
<PartnershipList xmlns="http://www.audatex.com/SAXIF">
 <Partnership>
  <CountryOrganizationId>CZ</CountryOrganizationId>
  <PartnershipId>Contract_58AB4635-D9C6-A04E</PartnershipId>
  <OwnerId>MM-O-BDD15299</OwnerId>
  <PartnerIdList>
   <String>MM-O-2A10BCF</String>
  </PartnerIdList>
  <Contract>
   <CountryOrganizationId>CZ</CountryOrganizationId>
   <ContractId>Contract_58AB4635-D9C6-A04E</ContractId>
   <LaborRateList>
    <LaborRateDetail>
     <Role>Labor</Role>
     <Category>1</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">250.0</Rate>
    </LaborRateDetail>
    <LaborRateDetail>
     <Role>Paint</Role>
     <Category>2</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">350.0</Rate>
    </LaborRateDetail>
   </LaborRateList>
   <IdBlockCodeList>
    <IDBlockCode>
     <IDBlockCode>51</IDBlockCode>
     <Entry>100</Entry>
    </IDBlockCode>
   </IdBlockCodeList>
   <VehicleKind>Car</VehicleKind>
   <RepairKind>BodyRepair</RepairKind>
   <ManufacturerCode>07</ManufacturerCode>
   <Status>Active</Status>
   <CreatedBy>MM-P-69F997009BBFB4FC2C</CreatedBy>
   <CreationTimeStamp>2014-09-09T15:17:46.000</CreationTimeStamp>
   <UpdatedBy>MM-P-69F997009BBFB4FC2C</UpdatedBy>
   <UpdateTimeStamp>2014-10-15T10:49:18.000</UpdateTimeStamp>
   <FirstVersionContractId>Contract_58AB4635-D9C6-A04E</FirstVersionContractId>
   <OwnerId>MM-O-BDD15299</OwnerId>
   <Manufacturer>07</Manufacturer>
   <VehicleType>Car</VehicleType>
   <VehicleAgeFrom>0</VehicleAgeFrom>
   <VehicleAgeTo>0</VehicleAgeTo>
   <ClaimType>Unknown</ClaimType>
  </Contract>
  <Description>Alfa Romeo</Description>
  <PartnerId>MM-O-2A10BCF</PartnerId>
 </Partnership>
 <Partnership>
  <CountryOrganizationId>CZ</CountryOrganizationId>
  <PartnershipId>Contract_F5134A37-F39A-823A</PartnershipId>
  <OwnerId>MM-O-BDD15299</OwnerId>
  <PartnerIdList>
   <String>MM-O-2A10BCF</String>
  </PartnerIdList>
  <Contract>
   <CountryOrganizationId>CZ</CountryOrganizationId>
   <ContractId>Contract_F5134A37-F39A-823A</ContractId>
   <LaborRateList>
    <LaborRateDetail>
     <Role>Labor</Role>
     <Category>1</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">250.0</Rate>
    </LaborRateDetail>
    <LaborRateDetail>
     <Role>Paint</Role>
     <Category>2</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">350.0</Rate>
    </LaborRateDetail>
   </LaborRateList>
   <IdBlockCodeList>
    <IDBlockCode>
     <IDBlockCode>51</IDBlockCode>
     <Entry>100</Entry>
    </IDBlockCode>
   </IdBlockCodeList>
   <VehicleKind>Car</VehicleKind>
   <RepairKind>BodyRepair</RepairKind>
   <ManufacturerCode>10</ManufacturerCode>
   <Status>Active</Status>
   <CreatedBy>MM-P-69F997009BBFB4FC2C</CreatedBy>
   <CreationTimeStamp>2014-09-09T15:22:27.000</CreationTimeStamp>
   <UpdatedBy>MM-P-69F997009BBFB4FC2C</UpdatedBy>
   <UpdateTimeStamp>2014-10-15T13:11:36.000</UpdateTimeStamp>
   <FirstVersionContractId>Contract_F5134A37-F39A-823A</FirstVersionContractId>
   <OwnerId>MM-O-BDD15299</OwnerId>
   <Manufacturer>10</Manufacturer>
   <VehicleType>Car</VehicleType>
   <VehicleAgeFrom>0</VehicleAgeFrom>
   <VehicleAgeTo>0</VehicleAgeTo>
   <ClaimType>Unknown</ClaimType>
  </Contract>
  <Description>Citroën</Description>
  <PartnerId>MM-O-2A10BCF</PartnerId>
 </Partnership>

Я google много учебников, но выглядит, что я делаю что-то неправильно только в начале. Кто-нибудь может мне посоветовать?

благодаря

Теги:

2 ответа

0
Лучший ответ

У вас есть недопустимый XML-документ.

<?xml version="1.0" encoding="UTF-8"?>
<CreationDateTime>Wed Nov 05 12:30:38 CET 2014</CreationDateTime>

Это полный XML-документ. Он имеет открывающий тег и закрывающий тег, и это он. Все, что добавлено в конец этого документа, сделает его недействительным. XML-документ может иметь только один корневой тег.

Если вы исправите свой XML-документ (возможно, переместив <CreationDateTime> внутри <PartnershipList> и сделав <PartnershipList> своим корневым тегом), то будет работать библиотека PHPX SimpleXML.

  • 0
    спасибо за ответ, я понимаю, что это неправильный документ для PHP, но как я могу это исправить? Это экспорт, который я получаю.
  • 0
    Если это то, что у вас есть, то у вас есть не XML. Это может называть себя XML, но это ложь. Если нет способа исправить этот экспорт, вам может потребоваться создать собственный анализатор.
Показать ещё 1 комментарий
2

Как уже говорило TRiG, XML isntrent. Вместо создания настраиваемого анализатора вы также можете редактировать содержимое XML перед его анализом. Файл XML должен выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<PartnerContainer>
<CreationDateTime>Wed Nov 05 12:30:38 CET 2014</CreationDateTime>
<PartnershipList xmlns="http://www.audatex.com/SAXIF">
 <Partnership>
  <CountryOrganizationId>CZ</CountryOrganizationId>
  <PartnershipId>Contract_58AB4635-D9C6-A04E</PartnershipId>
  <OwnerId>MM-O-BDD15299</OwnerId>
  <PartnerIdList>
   <String>MM-O-2A10BCF</String>
  </PartnerIdList>
  <Contract>
   <CountryOrganizationId>CZ</CountryOrganizationId>
   <ContractId>Contract_58AB4635-D9C6-A04E</ContractId>
   <LaborRateList>
    <LaborRateDetail>
     <Role>Labor</Role>
     <Category>1</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">250.0</Rate>
    </LaborRateDetail>
    <LaborRateDetail>
     <Role>Paint</Role>
     <Category>2</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">350.0</Rate>
    </LaborRateDetail>
   </LaborRateList>
   <IdBlockCodeList>
    <IDBlockCode>
     <IDBlockCode>51</IDBlockCode>
     <Entry>100</Entry>
    </IDBlockCode>
   </IdBlockCodeList>
   <VehicleKind>Car</VehicleKind>
   <RepairKind>BodyRepair</RepairKind>
   <ManufacturerCode>07</ManufacturerCode>
   <Status>Active</Status>
   <CreatedBy>MM-P-69F997009BBFB4FC2C</CreatedBy>
   <CreationTimeStamp>2014-09-09T15:17:46.000</CreationTimeStamp>
   <UpdatedBy>MM-P-69F997009BBFB4FC2C</UpdatedBy>
   <UpdateTimeStamp>2014-10-15T10:49:18.000</UpdateTimeStamp>
   <FirstVersionContractId>Contract_58AB4635-D9C6-A04E</FirstVersionContractId>
   <OwnerId>MM-O-BDD15299</OwnerId>
   <Manufacturer>07</Manufacturer>
   <VehicleType>Car</VehicleType>
   <VehicleAgeFrom>0</VehicleAgeFrom>
   <VehicleAgeTo>0</VehicleAgeTo>
   <ClaimType>Unknown</ClaimType>
  </Contract>
  <Description>Alfa Romeo</Description>
  <PartnerId>MM-O-2A10BCF</PartnerId>
 </Partnership>
 <Partnership>
  <CountryOrganizationId>CZ</CountryOrganizationId>
  <PartnershipId>Contract_F5134A37-F39A-823A</PartnershipId>
  <OwnerId>MM-O-BDD15299</OwnerId>
  <PartnerIdList>
   <String>MM-O-2A10BCF</String>
  </PartnerIdList>
  <Contract>
   <CountryOrganizationId>CZ</CountryOrganizationId>
   <ContractId>Contract_F5134A37-F39A-823A</ContractId>
   <LaborRateList>
    <LaborRateDetail>
     <Role>Labor</Role>
     <Category>1</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">250.0</Rate>
    </LaborRateDetail>
    <LaborRateDetail>
     <Role>Paint</Role>
     <Category>2</Category>
     <Rate Cur="CZK" Unit="h" MinValue="0" MaxValue="0">350.0</Rate>
    </LaborRateDetail>
   </LaborRateList>
   <IdBlockCodeList>
    <IDBlockCode>
     <IDBlockCode>51</IDBlockCode>
     <Entry>100</Entry>
    </IDBlockCode>
   </IdBlockCodeList>
   <VehicleKind>Car</VehicleKind>
   <RepairKind>BodyRepair</RepairKind>
   <ManufacturerCode>10</ManufacturerCode>
   <Status>Active</Status>
   <CreatedBy>MM-P-69F997009BBFB4FC2C</CreatedBy>
   <CreationTimeStamp>2014-09-09T15:22:27.000</CreationTimeStamp>
   <UpdatedBy>MM-P-69F997009BBFB4FC2C</UpdatedBy>
   <UpdateTimeStamp>2014-10-15T13:11:36.000</UpdateTimeStamp>
   <FirstVersionContractId>Contract_F5134A37-F39A-823A</FirstVersionContractId>
   <OwnerId>MM-O-BDD15299</OwnerId>
   <Manufacturer>10</Manufacturer>
   <VehicleType>Car</VehicleType>
   <VehicleAgeFrom>0</VehicleAgeFrom>
   <VehicleAgeTo>0</VehicleAgeTo>
   <ClaimType>Unknown</ClaimType>
  </Contract>
  <Description>Citroën</Description>
  <PartnerId>MM-O-2A10BCF</PartnerId>
 </Partnership>
 </PartnershipList>
</PartnerContainer>

В PHP вызовите file_get_contents чтобы получить XML-контент, чтобы вы могли редактировать XML-контент с помощью таких функций, как str_replace. После этого вы можете проанализировать XML-строку с помощью simplexml_load_string. Я думаю, что вы уже сделали, если делаете что-то внизу, но я не уверен, не тестировал:

$xnl_file = "xml.xml";
$xml = file_get_contents($xnl_file);
$xml = str_replace('<CreationDateTime>','<PartnerContainer><CreationDateTime>',$xml);
$xml .= '</PartnershipList></PartnerContainer>';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню