PHP SimpleXML с включенным responseHeader - PullRequest
0 голосов
/ 19 марта 2012

Я застрял, пытаясь получить доступ к элементам в моем SimpleXmlObject. Мне нужно получить доступ только к «applicationID», но у меня возникают проблемы при получении. Я успешно создал SimpleXmlObject из следующего кода: (я усек 9 из 10 документов ответа)

<response>
    <lst name='responseHeader'>
      <int name='status'>0</int>
      <lst name='params'>
        <str name='q'>applicationDateAdded:NOW()-1</str>
        <str name='wt'>xml</str>
      </lst>
    </lst>
    <result name='response' numFound='10' start='0'>
      <doc>
        <date name='applicationDateAdd'>2012-02-28T16:00:00Z</date>
        <arr name='applicationDescript'>
          <str>description</str>
          <str>desc</str>
        </arr>
        <bool name='applicationFeatured'>false</bool>
        <str name='applicationId'>APPID-00000000017</str>
        <str name='id'>APPID-00000000017</str>
        <str name='type'>APPLICATION</str>
      </doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
      <doc>...</doc>
    </result>
</response>

Ответы [ 2 ]

1 голос
/ 07 мая 2012

Спасибо за вашу помощь! Я решил это около месяца назад (и забыл, что я разместил здесь до сих пор). Хотя мое решение немного ювенильное и адаптировано под мои нужды, я с радостью помогу кому-нибудь с подобными проблемами. Следующий цикл перебирает и дает мне значение каждого атрибута:

// $results is the SimpleXmlElement object at the beginning
$numFound = $results -> attributes() -> numFound;
  echo "Number of Results found: ";
  echo $numFound;
  echo '<br><br>';

  if ($numFound > 0) {
     foreach($results -> children() as $content) {
        echo '<br>------------------------<br>';
        foreach ($content -> children() as $sub) {
      $attName = $sub -> attributes();
      echo $attName[0]." = ";
      $count = 0;
      foreach($sub -> children() as $val) {
        $val = $sub -> str[$count++];
        echo $val;
            echo '<br>';
      }
      echo '<br>';
        }
     }
  }
0 голосов
/ 19 марта 2012

Это выведет значение каждого applicationId (при условии, что строка XML находится в $xml):

$xmlObj = simplexml_load_string($xml);

foreach($xmlObj->result->doc as $doc)
{
    foreach($doc->str as $str)
    {
        if($str->attributes()->name == 'applicationId')
        {
            echo 'applicationId: ' . (string)$str . '<br />';
            break 1;
        }
    }
}
...