Duże brawa za wybór prawidłowego narzędzia do tego zadania

Jak widze tych walczących z wyrażeniami regularnymi to nie wiem czy śmiać się czy płakać...
$selectList = $form->getElementsByTagName('select');
$select = $selectList->item(0);
$optionList = $select->getElementsByTagName('option');
for ( $i = 0, $j = $optionList->length; $i < $j; $i++ ) {
$option = $optionList->item($i);
echo 'name => '.$option->getAttribute('name'); }
Piszę trochę w ciemno, bo nie wiem co chcesz koniec końcow osiągnąć, ale jeśli chodzi o pobranie całego formularza, to może przyda Ci się moja funkcja:
function dom_form_params(&$form) {
$inputList = $form->getElementsByTagName('input');
for ( $i = 0; $i < $inputList->length; $i++ ) {
$input = $inputList->item($i);
if ( '' === $name = $input->getAttribute('name')) {
continue;
}
$type = $input->getAttribute('type');
$value = $input->getAttribute('value');
if ( 'button' === $type ) {
continue;
}
if ( 'submit' === $type ) { // tylko chwilowo.........
continue;
}
if ( 'checkbox' === $type ) {
if ( true !== $input->hasAttribute('checked')) { // input nie jest zaznaczony, pomijamy..
continue;
}
if ( true !== $input->hasAttribute('value')) {
//TODO: sprawdzić czy hasAttribute działa dla róznych wielkości znaków nazwy atrybutu..
$value = 'on';
}
}
else if ( 'radio' === $type ) {
// Jeśli więcej niż jeden input o tej samej nazwie jest checked, interesuje nas ostatni w kolejności..
$checked = $input->hasAttribute('checked');
if ( true !== $checked ) {
continue;
}
if ( true !== $input->hasAttribute('value')) {
$value = 'on';
}
}
}
$selectList = $form->getElementsByTagName('select');
for ( $i = 0; $i < $selectList->length; $i++ ) {
$select = $selectList->item($i);
$name = $select->getAttribute('name');
$optionList = $select->getElementsByTagName('option');
for ( $j = 0; $j < $optionList->length; $j++ ) {
$option = $optionList->item($j);
$selected = $option->hasAttribute('selected');
$_value = $option->getAttribute('value');
if ( ! $option->hasAttribute('value')) { // jeżeli element nie ma value, value to jego nodeValue..
$_value = trim($option->nodeValue); }
if ( 0 === $j ) { // jeśli żaden option nie jest selected, to formularz przesyła 'value' pierwszego w kolejności elementu 'option'
$value = $_value;
continue;
}
if ( true !== $selected ) {
continue;
}
$value = $_value;
}
}
$textareaList = $form->getElementsByTagName('textarea');
for ( $i = 0; $i < $textareaList->length; $i++ ) {
$textarea = $textareaList->item($i);
if ( '' === $name = $textarea->getAttribute('name')) {
continue;
}
$value = $textarea->nodeValue;
}
return $output;
}
Nie jest jeszcze idealna, nie działa np. z elementami BUTTON, ale radzi sobie z 99% formularzy..