2011-07-27 4 views
2

PHPでWebサービスを使用しようとしています。私はWebサービスの出力を制御できません。それは良いXMLのように見えますが、simpleXMLは空のオブジェクトを返すだけです。ここではこれが私のスクリプトで簡単な$xml = file_get_contents($url);呼び出しによって得られているなぜsimpleXMLはこのXMLを何かに変換できないのですか?

<?xml version="1.0" encoding="utf-8"?> 
<DataSet xmlns="http://Service"> 
    <xs:schema id="WorkOrders" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="WorkOrders" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="WorkOrder"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="WorkOrder_x0023_" type="xs:string" minOccurs="0" /> 
       <xs:element name="DateEntered" type="xs:string" minOccurs="0" /> 
       <xs:element name="DateCompleted" type="xs:string" minOccurs="0" /> 
       <xs:element name="DateChanged" type="xs:string" minOccurs="0" /> 
       <xs:element name="Status" type="xs:string" minOccurs="0" /> 
       <xs:element name="Type" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
    <WorkOrders xmlns=""> 
     <WorkOrder diffgr:id="WorkOrder1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
     <WorkOrder_x0023_>7164724</WorkOrder_x0023_> 
     <DateEntered>07/19/11</DateEntered> 
     <DateCompleted>07/21/11</DateCompleted> 
     <DateChanged>07/21/11</DateChanged> 
     <Status>CP</Status> 
     <Type>IN</Type> 
     </WorkOrder> 
    </WorkOrders> 
    </diffgr:diffgram> 
</DataSet> 

Webサービスから返されるXMLです。 simplexml_load_string($xml);は、空のオブジェクトを返します。

(object) SimpleXMLElement Object 
(
) 

私はここに何かが不足していることを知っていますが、私はちょうどそれに私の指を置くことはできません。何か案は?

答えて

4

名前空間を指定する必要があります。名前空間とdiffgram(およびWorkOrderのID)などの属性にアクセスするときは、名前空間を指定する必要があります。

var_dump($xml->children('urn:schemas-microsoft-com:xml-diffgram-v1')->children()); 

(それらの子要素がバックデフォルトの名前空間である)

参考:お試しくださいhttp://blog.sherifmansour.com/?p=302

+0

はありがとうございます。私は本当にこれ以上頭を傷つけていた。 – DewBoy3d