ownerDocument->saveXML($node); } /** * Найти первый попавшийся узел с заданным именем nodeName. * @param DOMNode $node Узел. * @param string $nodename Название узла. * @return DOMNode Найденный узел либо null. */ function findNode($node, $nodename) { if($node==null) return null; $nextNode = $node->firstChild; while ($nextNode != null) { if($nextNode->nodeName==$nodename) { return $nextNode; } $nextNode=$nextNode->nextSibling; } return null; } /** * Найти первый попавшийся узел с заданным именем nodeName и атрибутом $attribute со значением $val. * @param $node * @param $nodename * @param $attribute * @param $val * @return */ function findNodeOnAttribute($node, $nodename,$attribute,$val) { if($node==null) return null; $nextNode = $node->firstChild; while ($nextNode != null) { if(($nextNode->nodeName==$nodename)&&($nextNode->getAttribute($attribute)==$val)) { return $nextNode; } $nextNode=$nextNode->nextSibling; } return null; } /** * Вернуть первый попавшийся узел среди всех дочерних (без рекурсии). * @param XMLNode $node Родительский узел. * @param String $nodename Название узла. * @return XMLNode Найденный узел */ function findFirstNode($node, $nodename) { if($node==null) return null; $mas=array(); $pos=0; $mas[$pos] = $node->firstChild; while ($mas[$pos]) { if($mas[$pos]->nodeName==$nodename) { return $mas[$pos]; } if($mas[$pos]->firstChild) { $pos++; $mas[$pos]=$mas[$pos-1]->firstChild; }else { //если не идёт дальше пытаемся подняться в верх по дереву while (true) { $mas[$pos] = $mas[$pos]->nextSibling; if (!$mas[$pos]) { if($pos>0){ $pos--; }else{ break; } }else { break; } } } } return ''; } //рекурсию не буду использовать, обойдусь массивом вложенности function findFirstNodeOnAttribute($node, $nodename,$attribute,$val) { $mas=array(); $pos=0; $mas[$pos] = $node->firstChild; while ($mas[$pos]) { if(($mas[$pos]->nodeName==$nodename)&&($mas[$pos]->getAttribute($attribute)==$val)) { return $mas[$pos]; } if($mas[$pos]->firstChild) { $pos++; $mas[$pos]=$mas[$pos-1]->firstChild; }else { //если не идёт дальше пытаемся подняться в верх по дереву while (true) { $mas[$pos] = $mas[$pos]->nextSibling; if (!$mas[$pos]) { if($pos>0){ $pos--; }else{ break; } }else { break; } } } } return ''; } //найти узелы по пути "node1->node2" function findNodeOnPath($node, $path) { if($node==null) return null; $params=explode("/",$path); for($i=0;$iownerDocument->createCDATASection(''); $node->appendChild($result); } return $result; } /** * Получить строку данных из первой попавшейся CDATA. * @param DOMNode $node Узел XML. * @return String Строка результата */ function getCdataValue($node) { $n=findNode($node,'#cdata-section'); if($n!=null) { return $n->nodeValue; } return ''; }