DOMDocument的东西可能很难处理,因为诸如print_r()和var_dump()之类的函数不一定与在普通数组和对象上执行相同的操作(参见手册中的
this comment).
您必须使用文档节点的各种功能和属性来提取数据.例如,如果您有以下XML:
This is a line item.
您可以输出以下各项:
$itemListObjects = $orderXML->getElementsByTagName('LineItemInfo');
foreach($itemListObjects as $node) {
echo $node->nodeValue; //echos "This is a line item."
echo $node->attributes->getNamedItem('attr1')->nodeValue; //echos "hi"
}
如果您有嵌套结构,则可以使用childNodes属性基本遵循相同的过程.例如,如果你有这个:
Line 1
Line 2
你可能会这样做:
$itemListObjects = $orderXML->getElementsByTagName('LineItemInfo');
foreach($itemListObjects as $node) {
if ($node->hasChildNodes()) {
foreach($node->childNodes as $c) {
echo $c->nodeValue .",";
}
}
}
//you'll get output of "Line 1,Line 2,"
希望有所帮助.
编辑特定代码和XML
我在测试脚本中运行了以下代码,它似乎对我有用.你能更具体地说明什么不起作用吗?我完全使用了您的代码,除了创建文档的前两行.你在loadHTML()上使用loadXML()吗?有什么错误吗?
$orderXML = new DOMDocument();
$orderXML->loadXML("
149593
149593
");
$itemListObject = $orderXML->getElementsByTagName('LineItemInfo');
foreach ($itemListObject as $element) {
$product = $element->getElementsByTagName('ProductId');
$productId = $product->item(0)->nodeValue;
echo $productId.'-';
}
//outputs "149593-149595-"