Как с использованием XPath вытащить из xml разные данные за один запрос?

Рейтинг: 1Ответов: 1Опубликовано: 26.11.2014

Доброго времени суток, знатоки! Попробую вкратце объяснить суть проблемы. У меня есть xml файл такого формата:

<Cnt id="681">
   <CFiles>
      <CFile name="24801"  id="24801"></CFile>
   </CFiles>
   <Pfiles>
      <PFile name="1851" id="1851"></PFile>
   </Pfiles>
</cnt>

И таких ячеек <cnt> у меня очень много. Также у меня есть набор id для cnt. Моя задача вытащить id и name у CFile и PFile у тех cnt, id которых мне дали. Я использую simpleXml и XPath. Запрос такого вида:

$model_q = $model->xpath('/Cnt[@id = '.$q.']/Pfiles/PFile');
        foreach($model_q as $mod)
        {
                $contents = Content::model()->findByAttributes(array('content_name'=>$mod['name']));
                if(!$contents)
                {
                    $content = new Content;
                    $content->content_id = $mod['id'];
                    $content->content_name = $mod['name'];
                    $content->save();
                }
        }

Где $q - один из id для cnt. Запрос работает, как надо, но это только PFile. А мне нужно в этом же запросе вытащить id и name для CFile. Еще один цикл писать не вариант. Как можно за один запрос вытащить данные из PFile и CFile?

Ответы

▲ 1Принят

Так:

/Cnt[@id='.$q.']/CFiles/CFile | /Cnt[@id='.$q.']/Pfiles/PFile