Получить результаты XML, где узел элемента равен строке

Хорошо, XML-файл выглядит так, он установлен в переменную $otherdata

<result>
 <sighting>
  <name>Johhny</name>
  <last>smith</last>
  <phone>5551234</phone>
 </sighting>
 </result>

и PHP-код выглядит так

$dom = new DOMDocument;
$dom ->load($otherdata);
$xpath = new DomXpath($dom);

$query = '//result/sighting[name = "Johhny"]/.';
$entries = $xpath->query($query);

foreach ($entries as $entry) {
 $newlat = $entry->textContent;

 echo $newlat
 }

когда я сталкиваюсь с проблемой, я пытаюсь получить значение в атрибутах 'last' и 'phone' и установить его равным переменной для хранения и последующего отображения... спасибо

2 ответа

Решение

Вы могли бы использовать

$query = '//result/sighting[name = "Johhny"]';

в качестве пути, таким образом, вы напрямую выбираете sighting элемент (ы). Затем вы можете прочитать содержимое и изменить его с помощью

foreach ($entries as $entry) {
 $last = $entry->getElementsByTagName('last')->item(0)->textContent;
 $entry->getElementsByTagName('name')->textContent = $newName;
 }

Таким образом, вы пробегаете все прицельные элементы, и внутри этих элементов вы получаете все дочерние элементы. Теперь вы можете хранить все ваши данные в массиве и отображать их позже.

$data = array();
$xml = new DOMDocument();
$xml->load($otherdata);

$nodes = $xml->getElementsByTagName('sighting');
foreach ($nodes as $node) {
    $children = $node->childNodes; 
    $i=0;
    foreach ($children as $child) { 
        $data[$i][] = $child->nodeValue;
    }
}

Таким образом, вы можете обновить элемент name и сохранить документ XML.

$xml = new DOMDocument();
$xml->load($file);

$nodes = $xml->getElementsByTagName('sighting');
foreach ($nodes->item as $node) {
    $children = $node->childNodes; 
    foreach ($children as $child) { 
        if ($child->nodeName == 'name')
            $child->nodeValue = 'Not Johnny';
    } 
}

$xml->save($file);
Другие вопросы по тегам