我很难从节点列表中提取单个节点值。
我的代码采用一个xml文件,其中包含多个字段,其中一些包含文本,文件路径和带扩展名的完整图像名称。
我对它运行一个expath查询,查找具有特定id的节点项。然后它存储匹配的节点项并将其保存为$ 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');
任何帮助都会很棒。
由于
答案 0 :(得分:2)
不应该是echo $oldnode->firstChild->nodeValue;
吗?我记得这个,因为从技术上讲你需要文本节点的值..但我可能会弄错,它已经有一段时间了。你可以尝试一下吗?
在我们对这个答案的评论中进行讨论之后,我想出了这个解决方案。我不确定它是否可以做得更清洁。但它应该有用。
$nodelist = $xpath->query($xpathexp);
if((is_null($nodelist)) || (! is_numeric($nodelist))) {
$oldnode = $nodelist->item(0);
$largeImg = null;
$thumbnailImg = null;
foreach( $oldnode->childNodes as $node ) {
if( $node->nodeName == "largeImg" ) {
$largeImg = $node->nodeValue;
} else if( $node->nodeName == "thumbnailImg" ) {
$thumbnailImg = $node->nodeValue;
}
}
var_dump($largeImg);
var_dump($thumbnailImg);
}
您还可以在$ oldnode上使用getElementsByTagName
,然后查看是否找到了任何内容(如果找到了节点,$ oldnode-> getElementsByTagName(“thumbnailImg”) - > item(0) - >的nodeValue)。哪个可能更清洁然后循环它们。