2017-02-20 51 views
0

Мне нужно использовать SOAP-сервис, используя экземпляр SoapClient в PHP.Как добавить атрибут типа в PHP SoapClient request

Он выдает эту ошибку проверки:

+"ValidationError": "cvc-type.2: The type definition cannot be abstract for element ns1:risk."

Как следует добавить атрибут type в массив, как это (в первой строке, то определение типа):

<xs1:risk xsi:type="xs:Car"> 
    <xs:base7> 
     <xs:base7code>00054030014</xs:base7code> 
    </xs:base7> 
    <xs:plate>8726CJR</xs:plate> 
    <xs:matriculationDate>2003-06-15</xs:matriculationDate> 
    <xs:purchaseDate>2003-06-15</xs:purchaseDate> 
    <xs:postalCode>03550</xs:postalCode> 
    <xs:town>SANT JOAN D'ALACANT</xs:town> 
    <xs:trailer>false</xs:trailer> 
    <xs:garageType>10</xs:garageType> 
    <xs:yearKilometers>28</xs:yearKilometers> 
    <xs:habitualDriver> 
     <xs1:identificationType>2</xs1:identificationType> 
     <xs1:identification>85858585E</xs1:identification> 
     <xs1:birthDate>1978-11-09</xs1:birthDate> 
     <xs1:gender>1</xs1:gender> 
     <xs1:personPermissionDate>1997-03-02</xs1:personPermissionDate> 
     <xs1:personExpeditionZone>1</xs1:personExpeditionZone> 
     <xs1:personMaritalStatus>3</xs1:personMaritalStatus> 
    </xs:habitualDriver> 
    <xs:owner> 
     <xs1:identificationType>2</xs1:identificationType> 
     <xs1:identification>85858585E</xs1:identification> 
    </xs:owner> 
</xs1:risk> 
+1

Вы можете манипулировать элементами DOM http://php.net/manual/en/cl ass.domdocument.php –

+2

Можете ли вы уточнить свой вопрос? –

+1

«вот так» как? – miken32

ответ

0

Этот скрипт преобразует ваш xml-файл в массив

class DaneParser 
{ 
    public $arrayAttributes = array(); 
    public $attrName; 

    public function __construct($xml) 
    { 
     $this->parser = xml_parser_create(); 
     xml_set_object($this->parser, $this); 
     xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); 
     xml_set_element_handler($this->parser, "startElement", "endElement"); 
     xml_set_character_data_handler($this->parser, "characterData"); 
     xml_parse($this->parser, $xml); 
    } 

    function startElement($parser, $name, $attributes) 
    { 
     $name = explode(':',$name); 
     $this->attrName = $name[1]; 
    } 


    function endElement($parser, $name) 
    { 

    } 

    function characterData($parser, $data) 
    { 
     if(!isset($this->arrayAttributes[$this->attrName])) 
      $this->arrayAttributes[$this->attrName] = $data; 
    } 

}//END class `enter code here` 

//Open xml file 
$xml = file_get_contents("xml1.xml"); 

//run sax 
$pp = new DaneParser($xml); 

//Print array 
echo '<pre>'; 
print_r($pp->arrayAttributes); 
echo '</pre>'; 
+0

Я обновил вопрос – jmunozco