php - Not finding elements using getElementsByTagName() using DomDocument -
i'm trying loop through multiple <lineiteminfo> products contained within <lineitems> within xml i'm parsing pull product ids out , send emails , other actions each product.
the problem it's not returning anything. i've verified xml data valid , contain necessary components.
$itemlistobject = $orderxml->getelementsbytagname('lineiteminfo'); var_dump($itemlistobject->length); var_dump($itemlistobject);   the output of var_dump is:
int(0) object(domnodelist)#22 (0) { }   this first time messing , it's taken me couple of hours can't figure out. advice awesome.
edit:
my xml looks this... except lot more tags productid
<lineitems>      <lineiteminfo>          <productid href='[url_to_product_xml]'>149593</productid>      </lineiteminfo>      <lineiteminfo>          <productid href='[url_to_product_xml]'>149593</productid>      </lineiteminfo> </lineitems>   executing following code not me productid
$itemlistobject = $orderxml->getelementsbytagname('lineiteminfo'); foreach ($itemlistobject $element) {          $product = $element->getelementsbytagname('productid');         $productid = $product->item(0)->nodevalue;         echo $productid.'-'; }   edit #2
as side note, calling
$element->item(0)->nodevalue   on $element instead of $product caused script's execution discontinue , not throwing errors logged server. it's pain debug when have run credit card find out whether it's functioning or not.
domdocument stuff can tricky handle on, because functions such print_r() , var_dump() don't perform same on normal arrays , objects (see this comment in manual).
you have use various functions , properties of document nodes pull out data. instance, if had following xml:
<lineiteminfo attr1="hi">this line item.</lineiteminfo>   you output various parts of using:
$itemlistobjects = $orderxml->getelementsbytagname('lineiteminfo'); foreach($itemlistobjects $node) {     echo $node->nodevalue;    //echos "this line item."     echo $node->attributes->getnameditem('attr1')->nodevalue;  //echos "hi" }   if had nested structure, can follow same procedure using childnodes property.  example, if had this:
<lineiteminfo attr1="hi">   <lineitem>line 1</lineitem>   <lineitem>line 2</lineitem> </lineiteminfo>   you might this:
$itemlistobjects = $orderxml->getelementsbytagname('lineiteminfo'); foreach($itemlistobjects $node) {     if ($node->haschildnodes()) {       foreach($node->childnodes $c) {          echo $c->nodevalue .",";       }     } }  //you'll output of "line 1,line 2,"   hope helps.
edit specific code , xml
i ran following code in test script, , seemed work me.  can more specific what's not working?  used code exactly, except first 2 lines create document.  using loadxml() on loadhtml()?  there errors?
$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 $element) {      $product = $element->getelementsbytagname('productid');     $productid = $product->item(0)->nodevalue;     echo $productid.'-'; }  //outputs "149593-149595-"      
Comments
Post a Comment