Получить результаты 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);