2011-12-20 2 views
2

Я пытался получить SimpleXMLElement извлечь значение vsingle Фро файла XML с помощью следующего кода в примерах PHP.net:Извлечение элемента с помощью SimpleXMLElement

$resp = new SimpleXMLElement($xml); 
foreach($resp->SESSION_LIST->SESSION as $sess){ 
    $type = $sess->TRACKING->TYPE; 
} 

Когда я делаю так, возвращаемое значение всегда является еще одним объектом simpleXML, и я придерживаюсь того, как получить только то значение, которое я ищу. Может кто-то, пожалуйста, дайте мне толчок в правильном направлении?

Вот строка XML, которую я использую. Он может иметь несколько атрибутов сессии:

$xml = <<<XML 
<?xml version="1.0"?> 
    <FREIGHTVIEW> 
     <SESSION_LIST> 
      <SESSION id="529075"> 
       <SESSION_ID>529075</SESSION_ID> 
       <LABEL>116800</LABEL> 
       <INTEGRATION_REFERENCE_NUMBER>WDLSTRFDTS</INTEGRATION_REFERENCE_NUMBER> 
       <TRACKING> 
       <TYPE>provider assigned</TYPE> 
       <EVENT_DATETIME>03/01/11 02:07:59 PM</EVENT_DATETIME> 
       <TIMEZONE /> 
       <USER_NAME>Dispatch Team</USER_NAME> 
       <COMPANY_NAME>M&amp;W Distribution</COMPANY_NAME> 
       <RECORDED_DATETIME>03/01/11 02:07:59 PM</RECORDED_DATETIME> 
       <SOURCE /> 
      </TRACKING> 
      <QUOTE id="5173468"> 
       <QUOTE_ID>5173468</QUOTE_ID> 
       <CARRIER type="Private"> 
        <NAME>- FedEx Freight Priority -</NAME> 
        <CARRIER_REFERENCE_NUMBER>FXFE</CARRIER_REFERENCE_NUMBER> 
        <CONTACT>- FedEx Freight Priority -</CONTACT> 
        <EMAIL /> 
        <PHONE></PHONE> 
       </CARRIER> 
       <TOTAL_AMOUNT>262.57</TOTAL_AMOUNT> 
       <ACCESSORIALS> 
        <ACCESSORIAL> 
         <NAME>fuel surcharge</NAME> 
         <AMOUNT>79.47</AMOUNT> 
        </ACCESSORIAL> 
        <ACCESSORIAL> 
         <NAME>delivery appointment request</NAME> 
         <AMOUNT>0.00</AMOUNT> 
        </ACCESSORIAL> 
        <ACCESSORIAL> 
         <NAME>line haul</NAME> 
         <AMOUNT>183.10</AMOUNT> 
        </ACCESSORIAL> 
       </ACCESSORIALS> 
       <EQUIPMENT> 
        <MODE>ltl</MODE> 
        <TYPE></TYPE> 
       </EQUIPMENT> 
       <PICKUP_DATE></PICKUP_DATE> 
       <ESTIMATED_DELIVERY_DATE></ESTIMATED_DELIVERY_DATE> 
       <REFERENCE_ID>37307086</REFERENCE_ID> 
       <QUOTE_GOOD_UNTIL></QUOTE_GOOD_UNTIL> 
       <QUOTE_TYPE>instant ltl</QUOTE_TYPE> 
       <COMMENTS></COMMENTS> 
       <QUOTE_STATUS>assigned</QUOTE_STATUS> 
      </QUOTE> 
     </SESSION> 
    </SESSION_LIST> 
</FREIGHTVIEW> 
XML; 
+0

Вы знаете, что будет на самом деле *** ** бесконтрольного полезно здесь ... говорит нам, который который вы действительно хотите. – Layke

+0

Элементы SESSION, а не атрибуты. :) – DanMan

+0

Я извиняюсь за то, что не уточнил, «какой волнующий элемент я действительно хочу», это значение в элементе . Я думал, что это было бы ясно из примера. В следующий раз я буду уверен, что буду очень конкретным. – radi8

ответ

2

Вы должны типаж объект в строку:

$type = (string) $sess->TRACKING->TYPE; 
+0

Спасибо за это. Я разрывал волосы. В документации [PHP] (http://ie2.php.net/manual/en/simplexml.examples-basic.php) никогда не упоминается об этом, что необычно. Документация PHP обычно довольно хороша. – TRiG

+1

Я действительно сообщил об этом как об ошибке в документации PHP. – TRiG

Смежные вопросы