2010-01-20 8 views
2
<data> 
    <gig id="1"> 
    <date>December 19th</date> 
    <venue>The Zanzibar</venue> 
    <area>Liverpool</area> 
    <telephone>Ticketline.co.uk</telephone> 
    <price>£6</price> 
    <time>Time TBA</time> 
</gig> 
<gig id="2"> 
    <date>Sat. 16th Jan</date> 
    <venue>Celtic Connection, Classic Grand</venue> 
    <area>Glasgow</area> 
    <telephone>0141 353 8000</telephone> 
    <price>£17.50</price> 
    <time>7pm</time> 
</gig> 

Скажите, хотел ли я просмотреть значения «date» из элемента gig, у которого есть атрибут 2, как я могу сделать это с помощью php?Поиск значения дочернего объекта по определенному атрибуту

В основном я хочу удалить слово id 2, а затем создать его снова или просто изменить.

используя простойXML Как я могу просто удалить определенную часть?

ответ

1

Для того, чтобы найти узлы, используйте XPath.

$data->xpath('//gig[@id="2"]'); 

Она возвращает массив со всеми узлами <gig/> с атрибутом id, значение которого равно 2. Обычно, она будет содержать 0 или 1 элемент. Вы можете изменить их напрямую. Например:

$data = simplexml_load_string(
    '<data> 
     <gig id="1"> 
      <date>December 19th</date> 
      <venue>The Zanzibar</venue> 
      <area>Liverpool</area> 
      <telephone>Ticketline.co.uk</telephone> 
      <price>£6</price> 
      <time>Time TBA</time> 
     </gig> 
     <gig id="2"> 
      <date>Sat. 16th Jan</date> 
      <venue>Celtic Connection, Classic Grand</venue> 
      <area>Glasgow</area> 
      <telephone>0141 353 8000</telephone> 
      <price>£17.50</price> 
      <time>7pm</time> 
     </gig> 
    </data>' 
); 

$nodes = $data->xpath('//gig[@id="2"]'); 

if (empty($nodes)) 
{ 
    // didn't find it 
} 

$gig = $nodes[0]; 
$gig->time = '6pm'; 

die($data->asXML()); 

Удаления произвольных узлов является порядком более сложного, так что гораздо проще изменить значение, а не удалять/воссоздание узла.

+0

Я продолжаю получать эту ошибку, Неустранимая ошибка: вызовите функцию-член xpath() для не-объекта в /var/www/sm16832/public_html/cms/index.php в строке 45 –

+0

В этом примере $ data это ваш объект SimpleXMLElement. Чтобы избежать путаницы, * always * назовите свои PHP-классы после узла, который они представляют. Если корневой узел «», то ваш PHP var должен быть '$ data'. –

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