Php 使用DOMDocument使用getElementsByTagName()找不到元素

Php 使用DOMDocument使用getElementsByTagName()找不到元素,php,xml,dom,Php,Xml,Dom,我试图在XML中的中循环查看包含在中的多个产品,以提取产品ID,发送电子邮件,并为每个产品执行其他操作 问题是它没有返回任何东西。我已经验证了XML数据是有效的,并且它确实包含必要的组件 $itemListObject = $orderXML->getElementsByTagName('LineItemInfo'); var_dump($itemListObject->length); var_dump($itemListObject); var_dump的输出为: int(0)

我试图在XML中的
中循环查看包含在
中的多个
产品,以提取产品ID,发送电子邮件,并为每个产品执行其他操作

问题是它没有返回任何东西。我已经验证了XML数据是有效的,并且它确实包含必要的组件

$itemListObject = $orderXML->getElementsByTagName('LineItemInfo');
var_dump($itemListObject->length);
var_dump($itemListObject);
var_dump
的输出为:

int(0)
object(DOMNodeList)#22 (0) {
}
这是我第一次搞砸这件事,花了我几个小时,但我想不出来。任何建议都会很棒

编辑:

我的XML看起来像这样。。。除了ProductId之外,还有更多的标签

<LineItems>
     <LineItemInfo>
         <ProductId href='[URL_TO_PRODUCT_XML]'>149593</ProductId>
     </LineItemInfo>
     <LineItemInfo>
         <ProductId href='[URL_TO_PRODUCT_XML]'>149593</ProductId>
     </LineItemInfo>
</LineItems>
$itemListObject = $orderXML->getElementsByTagName('LineItemInfo');
foreach ($itemListObject as $element) { 
        $product = $element->getElementsByTagName('ProductId');
        $productId = $product->item(0)->nodeValue;
        echo $productId.'-';
}
编辑#2

作为旁注,打电话

$element->item(0)->nodeValue

在$element而不是$product上导致脚本的执行中断,并且不会抛出服务器记录的任何错误。当您必须运行信用卡以确定它是否正常工作时,调试是一件痛苦的事情。

XML标记往往是小写的驼峰(或者只是“驼峰”),即“lineItemInfo”,而不是“lineItemInfo”,XML是区分大小写的,所以请检查它。

DOMDocument stuff可能很难处理,因为像
print\u r()
var\u dump()
这样的函数不一定像在普通数组和对象上那样执行相同的操作(请参见手册)

您必须使用文档节点的各种函数和属性来提取数据。例如,如果您有以下XML:

<LineItemInfo attr1="hi">This is a line item.</LineItemInfo>
如果有嵌套结构,则可以使用
childNodes
属性执行基本相同的过程。例如,如果您有:

<LineItemInfo attr1="hi">
  <LineItem>Line 1</LineItem>
  <LineItem>Line 2</LineItem>
</LineItemInfo>
希望有帮助

编辑特定代码和XML

我在一个测试脚本中运行了下面的代码,它似乎适合我。你能更具体地说明什么不起作用吗?除了创建文档的前两行之外,我完全使用了您的代码。您是否在使用
loadXML()
而不是
loadHTML()
?有什么错误吗

$orderXML = new DOMDocument();
$orderXML->loadXML("
<LineItems>
     <LineItemInfo>
         <ProductId href='[URL_TO_PRODUCT_XML]'>149593</ProductId>
     </LineItemInfo>
     <LineItemInfo>
         <ProductId href='[URL_TO_PRODUCT_XML]'>149593</ProductId>
     </LineItemInfo>
</LineItems>
");

$itemListObject = $orderXML->getElementsByTagName('LineItemInfo');
foreach ($itemListObject as $element) { 
    $product = $element->getElementsByTagName('ProductId');
    $productId = $product->item(0)->nodeValue;
    echo $productId.'-';
}

//outputs "149593-149595-"
$orderXML=newDOMDocument();
$orderXML->loadXML(“
149593
149593
");
$itemListObject=$orderXML->getElementsByTagName('LineItemInfo');
foreach($itemListObject作为$element){
$product=$element->getElementsByTagName('ProductId');
$productId=$product->item(0)->nodeValue;
echo$productId.'-';
}
//输出“149593-149595-

你一针见血,但不知怎的,我还是漏掉了一块拼图。我已经更新了我的原始帖子。@Webnet-我用您添加的XML和代码更新了我的答案。它似乎对我有用。。。您是否看到任何错误?是的,我正在使用loadXML。问题是foreach循环甚至没有被执行。糟糕,我刚刚意识到我使用了错误的XML变量来加载XML。该死!非常感谢你的帮助!
$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,"
$orderXML = new DOMDocument();
$orderXML->loadXML("
<LineItems>
     <LineItemInfo>
         <ProductId href='[URL_TO_PRODUCT_XML]'>149593</ProductId>
     </LineItemInfo>
     <LineItemInfo>
         <ProductId href='[URL_TO_PRODUCT_XML]'>149593</ProductId>
     </LineItemInfo>
</LineItems>
");

$itemListObject = $orderXML->getElementsByTagName('LineItemInfo');
foreach ($itemListObject as $element) { 
    $product = $element->getElementsByTagName('ProductId');
    $productId = $product->item(0)->nodeValue;
    echo $productId.'-';
}

//outputs "149593-149595-"