use simplexml to get attributes of elements

Posted by user1291894 on Stack Overflow See other posts from Stack Overflow or by user1291894
Published on 2012-03-25T23:22:53Z Indexed on 2012/03/25 23:30 UTC
Read the original article Hit count: 183

Filed under:
|

I am trying to parse an xml file with a soap envelope from a web service using php. I would like to use SoapClient, but I get an error back that 'page must be viewed over secure channel SSL', which I think is an issue on their end, so I gave up on that. Currently I am using curl to get a result back. Then I put it into a simplexml object like so:

  <?php
 $xml = @simplexml_load_string($result, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
 $xml->registerXPathNamespace('xs', 'http://www.w3.org/2001/XMLSchema');
 $output = $xml->xpath('//soap:Body');
 ?>

I now have this:

Array
(


 [0] => SimpleXMLElement Object
        (
            [GetDocumentListResponse] => SimpleXMLElement Object
                (
                    [GetDocumentListResult] => <NewDataSet>
  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="_x0023_temp_list">
      <xs:complexType>
        <xs:attribute name="tran_datetime" type="xs:string" />
        <xs:attribute name="sender" type="xs:string" />
        <xs:attribute name="doc_type_num" type="xs:string" />
        <xs:attribute name="doc_date" type="xs:string" />
        <xs:attribute name="doc_num" type="xs:string" />
        <xs:attribute name="doc_sys_no" type="xs:string" />
        <xs:attribute name="is_new" type="xs:string" />
      </xs:complexType>
    </xs:element>
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="_x0023_temp_list" />
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <_x0023_temp_list tran_datetime="2012-03-22T13:37:17.237" sender="webservice" doc_type_num="100" doc_date="2012-03-22T13:37:17.253" doc_num="12345" doc_sys_no="1234567" is_new="1" />
</NewDataSet>
                )

        )

)

I am able to loop through this object and get to the part between the "NewDataSet" tags, but I can't seem to get to the individual elements. What I need is the attributes in the last tag that starts with _x0023_temp_list. I'm not sure if the tag is always going to be named that, so I will probably also have to deal with getting attributes from the tag with the xs namespace as well. I've read quite a few other posts and have tried several different methods of getting the info and so far nothing has seemed to work.

© Stack Overflow or respective owner

Related posts about php

Related posts about Xml