У меня возникли трудности с извлечением одного значения узла из нодлиста.Извлечение значения одного узла из ноделиста
Мой код принимает файл xml, который содержит несколько полей, некоторые из которых содержат текст, пути к файлам и полные имена изображений с расширениями.
Я запускаю запрос expath по нему, ища элемент узла с определенным идентификатором. Затем он сохраняет совпадающий элемент узла и сохраняет его как $ oldnode
Теперь моя проблема заключается в попытке извлечь значение из этого $ oldnode. Я попытался var_dump ($ oldnode) и print_r ($ oldnode), но он возвращает следующее: "object (DOMElement) # 8 (0) {}"
Я предполагаю, что переменная $ oldnode является объектом, но как получить доступ к нему?
Я могу отследить весь список узлов, используя: echo $ oldnode-> nodeValue;
Отображаются все узлы в списке.
Вот код, который обрабатывает XML-файл. линия 6 - линия, о которой идет речь ...
$xpathexp = "//item[@id=". $updateID ."]";
$xpath = new DOMXpath($xml);
$nodelist = $xpath->query($xpathexp);
if((is_null($nodelist)) || (! is_numeric($nodelist))) {
$oldnode = $nodelist->item(0);
echo $oldnode->nodeValue;
//$imgUpload = strchr($oldnode->nodeValue, ' ');
//$imgUpload = strrchr($imgUpload, '/');
//explode('/',$imgUpload);
//$imgUpload = trim($imgUpload);
$newItem = new DomDocument;
$item_node = $newItem ->createElement('item');
//Create attribute on the node as well
$item_node ->setAttribute("id", $updateID);
$largeImageText = $newItem->createElement('largeImgText');
$largeImageText->appendChild($newItem->createCDATASection($largeImgText));
$item_node->appendChild($largeImageText);
$urlANode = $newItem->createElement('urlA');
$urlANode->appendChild($newItem->createCDATASection($urlA));
$item_node->appendChild($urlANode);
$largeImg = $newItem->createElement('largeImg');
$largeImg->appendChild($newItem->createCDATASection($imgUpload));
$item_node->appendChild($largeImg);
$thumbnailTextNode = $newItem->createElement('thumbnailText');
$thumbnailTextNode->appendChild($newItem->createCDATASection($thumbnailText));
$item_node->appendChild($thumbnailTextNode);
$urlB = $newItem->createElement('urlB');
$urlB->appendChild($newItem->createCDATASection($urlA));
$item_node->appendChild($urlB);
$thumbnailImg = $newItem->createElement('thumbnailImg');
$thumbnailImg->appendChild($newItem->createCDATASection(basename($_FILES['thumbnailImg']['name'])));
$item_node->appendChild($thumbnailImg);
$newItem->appendChild($item_node);
$newnode = $xml->importNode($newItem->documentElement, true);
// Replace
$oldnode->parentNode->replaceChild($newnode, $oldnode);
// Display
$xml->save($xmlFileData);
//header('Location: index.php?a=112&id=5');
Любая помощь будет замечательной.
Благодаря
да, который захватывает первое дочернее значение .. это здорово .. Но как я могу пройти через объект и выбрать элемент, который я хочу? Также, как получить результат всего объекта? – Owzzz
Я не уверен, что вы имеете в виду, вы уже выбираете элемент, который хотите, используя свой Xpath, не так ли? И какой вывод вы ожидаете от «всего объекта», можете ли вы привести пример? (возможно, на pastebin.com?) – CharlesLeaf
xpath выбирает элемент с идентификатором определенного значения. Этот элемент (узел) имеет несколько узлов внутри него. Пример списка узлов в файле xml выглядит следующим образом: http://pastebin.com/R8qmbg9F ... поэтому, используя вашу строку: $ oldnode-> firstChild-> nodeValue; он захватывает значение узла –
Owzzz