Я читал другие сообщения здесь об этой теме, но я не могу получить то, что хочу.
Это оригинальный HTML:
<div class="add-to-cart"><form class=" ajax-cart-form ajax-cart-form-kit" id="uc-product-add-to-cart-form-20" method="post" accept-charset="UTF-8" action="/product/rainbox-river-lodge-guides-salomon-selection"> <div><div class="attributes"><div class="attribute attribute-1 odd"><div id="edit-attributes-1-wrapper" class="form-item"> <label for="edit-attributes-1">Color: </label> <select id="edit-attributes-1" class="form-select" name="attributes[1]"><option value="4">Blue</option><option selected="selected" value="2">Brown</option><option value="1">Tan</option></select> </div> </div><div class="attribute attribute-2 even"><div id="edit-attributes-2-wrapper" class="form-item"> <label for="edit-attributes-2">Rod Weight: </label> <select id="edit-attributes-2" class="form-select" name="attributes[2]"><option selected="selected" value="5">5</option><option value="6">6</option><option value="7">7</option></select> </div> </div></div><input type="hidden" value="1" id="edit-qty" name="qty"> <input type="submit" add_to_cart="{ "qty": 1, "nid": "20" }" class="form-submit node-add-to-cart ajax-submit-form" value="Add to cart" id="edit-submit-20" name="op"> <input type="hidden" value="form-688be703b34b0a9b0bb5bd98577ea203" id="form-688be703b34b0a9b0bb5bd98577ea203" name="form_build_id"> <input type="hidden" value="42cf9b00fa3c367125d06cbd4e033531" id="edit-uc-product-add-to-cart-form-20-form-token" name="form_token"> <input type="hidden" value="uc_product_add_to_cart_form_20" id="edit-uc-product-add-to-cart-form-20" name="form_id"> <input type="hidden" value="20" id="edit-pnid" name="pnid"> </div></form> </div>
Я хочу только извлечь два <select>
и их содержимое.
Это то, что у меня есть на данный момент:
$dom = new DOMDocument(); $dom->loadHTML($node->content['add_to_cart']['#value']); // this loads the html above $selects = $dom->getElementsByTagName('select'); $tempDom = new DOMDocument(); $tempImported = $tempDom->importNode($selects, true); $tempDom->appendChild($tempImported); $output = $tempDom->saveHTML(); var_dump($output);
Но я получаю пустой $output
Вот рабочий код:
$dom = new DOMDocument(); $dom->loadHTML($node->content['add_to_cart']['#value']); $selects = $dom->getElementsByTagName('select'); $tempDom = new DOMDocument(); foreach ($selects as $select) { $tempImported = $tempDom->importNode($select, true); $tempDom->appendChild($tempImported); } $output = $tempDom->saveHTML(); print('<div class="attributes">'. $output .'</div>');
dom->getElementsByTagName()
возвращает свои результаты в виде массива, поэтому …
$tempImported = $tempDom->importNode($selects, true);
на данный момент $selects
на самом деле представляет собой массив, который вы не можете импортировать. Вам придется перебирать его и импортировать каждый элемент (узлы результата) отдельно.