0

XMLファイルがあります

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header />
   <s:Body>
     <GetAllItemCategoryResponse xmlns="http://tempuri.org/">
       <GetAllItemCategoryResult xmlns:a="http://schemas.datacontract.org/2004/07/HQService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
         <a:ItemsCategory>
         <a:Code>prov</a:Code>
         <a:Description>Te Fresketa</a:Description>
         <a:LastModifiedDate>0001-01-01T00:00:00</a:LastModifiedDate>
         <a:active>true</a:active>
         </a:ItemsCategory>       
       </GetAllItemCategoryResult>
     </GetAllItemCategoryResponse>
   </s:Body>
 </s:Envelope>

このファイルを読み取って、レコードをデータベースに保存する必要があります。今まで私はレコードをアップロードして読み取ることができましたが、データベースに保存できません。私の場合と同様のXML形式を持つこの例を見てきましたが、PHPでは機能しません-PHPでXMLを配列に変換します-phpでsoap xmlを解析し、データベースに保存します

私はCodeIgniterを使用しています(以下は私のコードです)

function set_xml()
{
    if ($this->input->post('submit'))
    {

        //uploading the file to the server
        if (!empty($_FILES['userfile']['name'])){
            $this->upload->do_upload($_FILES['userfile']['name']);
        }

    }

    $xml = realpath(APPPATH . '../public/').'/'.$_FILES['userfile']['name'];

    $fh = fopen($xml,'r');
    $theData = fread($fh,filesize($xml));
    fclose($fh);

            $element = new simpleXMLElement($theData);
    $centerElement = $element->Body->GetAllItemCategoryResponse->GetAllItemCategoryResult->ItemsCategory;

    $center = array(
        $centerElement->Code
    );

    var_dump($centerElement);

}

何か助けてください?

4

1 に答える 1

1

データベースへの保存、またはXMLの要素へのアクセスに関する質問はありますか?

後者が当てはまると思いますが、名前空間があなたを失望させています。

SOAP応答から要素にアクセスする次の例を参照してください。

$xml = file_get_contents(realpath(APPPATH . '../public/').'/'.$_FILES['userfile']['name']); 
$doc = simplexml_load_string($xml,NULL,false, "http://schemas.xmlsoap.org/soap/envelope/");
$doc->registerXPathNamespace('a', 'http://schemas.datacontract.org/2004/07/HQService');


foreach ($doc->xpath('//a:ItemsCategory') as $category) {
    foreach ($category->children('http://schemas.datacontract.org/2004/07/HQService') as $child) {
        echo $child->getName() . ":" . (string)$child . "\n";
    }
}

これにより、次のように出力されます。

Code:prov
Description:Te Fresketa
LastModifiedDate:0001-01-01T00:00:00
active:true

その後、好きなようにデータベースに保存します。お役に立てれば!

于 2012-12-12T14:50:11.540 に答える