public function checkLogin(){ $document = new domDocument(); $document->load("users/users.xml"); $xpath = new domXpath($document); $nodelist = $xpath->query("/*/user[string(login) = '$this->login']"); return ($nodelist->length == 0)?false:true; }
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName, "; echo "Value: $node->nodeValue <br/>"; } } $xpath = new domXpath($document); $nodelist = $xpath->query("/*/noutbuk/*"); for($i=2; $i<($nodelist->length+1); $i++){ viewInfo($xpath->query("/*/noutbuk/*[position() = ".$i."]")); } echo "<br/>-------------------------------------<br/>"; viewInfo($xpath->query("/*/*/*/*[name() = 'year']/..")); ?>
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName <br/>"; echo "Value: $node->nodeValue <br/>"; } } $xpath = new domXpath($document); viewInfo($xpath->query("/asort:asortiment/descendant::*")); ?>
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName <br/>"; echo "Value: $node->nodeValue <br/>"; } } $xpath = new domXpath($document); viewInfo($xpath->query("/*/noutbuk/model/name/ancestor::*")); ?>
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName <br/>"; echo "Value: $node->nodeValue <br/>"; } } $xpath = new domXpath($document); viewInfo($xpath->query("/*/noutbuk/preceding-sibling::*")); viewInfo($xpath->query("/*/noutbuk/following-sibling::*")); ?>
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist) { for ($i = 0; $i < $nodelist->length; $i++) { $node = $nodelist->item($i); echo "Name: {$node->nodeName} <br/>"; echo "Value: {$node->nodeValue} <br/>"; } } $xpath = new domXpath($document); viewInfo($xpath->query("*/self::noutbuk/*")); viewInfo($xpath->query("*/self::noutbuk/*/.."));
/ПРЕДИКАТЫ УКАЗЫВАЕМ В КВАДРАТНЫХ СКОБКАХ [] /Запрос query("/node()/*[floor(2.5) = 2]") - проверяет на соответствие условия функции округления в меньшую сторону, если условие верно, то вернет результат /Запрос query("/node()/*[ceiling(2.5) = 3]") - проверяет на соответствие условия функции округления в большую сторону, если условие верно, то вернет результат /Запрос query("/node()/*[round(2.5) = 3]") - проверяет на соответствие условия функции адекватного округления, если условие верно, то вернет результат /Запрос query("/node()/*[floor(2.4)+1 = 3]") - проверяет на соответствие условия функции округления в меньшую сторону плюс единица, если условие верно, то вернет результат /Запрос query("/node()/*[round(2.6) div 2 = 1.5]") - проверяет на соответствие условия функции адекватного округления разделенного на 2, если условие верно, то вернет результат /Запрос query("/node()/*[round(2.6) mod 2 = 1]") - проверяет на соответствие условия функции адекватного округления с остатком от деления, если условие верно, то вернет результат /В арифметических предикатах так же могут быть сложные условия [(ceiling(2.5) = 3) and ((1<2) or (2>=2))] */ function viewResult($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName, "; echo "Value: $node->nodeValue<br/>"; } } $document = new domDocument(); $document->load("test.xml"); $xpath = new domXpath($document); viewResult($xpath->query("/node()/*[floor(2.5) = 2]")); echo "<br />---------------------------------------<br />"; viewResult($xpath->query("/node()/*[ceiling(2.5) = 3]")); echo "<br />---------------------------------------<br />"; viewResult($xpath->query("/node()/*[round(2.4) = 2]")); echo "<br />---------------------------------------<br />"; viewResult($xpath->query("/node()/*[floor(2.4)+1 = 3]")); echo "<br />---------------------------------------<br />"; viewResult($xpath->query("/node()/*[round(2.6) div 2 = 1.5]")); echo "<br />---------------------------------------<br />"; viewResult($xpath->query("/node()/*[round(2.6) mod 2 = 1]")); ?>
/Запрос query("/node()/node()/node()[contains(string(*), 'ota')]") - проверяет на совпадение в строке дочерних элементов указанной строки (если часть указанной строки встречается в строке дочерних элементов вернет результат) /Запрос query("/node()/node()/node()[substring-before(string(*), 'ota') = 'Toy']") - проверяет на совпадение указанного условия (если начало строки дочерних элементов равно указанной строке то вернет результат) /Запрос query("/node()/node()/node()[substring-after(string(*), 'Toy') = 'ota']") - проверяет на совпадение указанного условия (если продолжение строки дочерних элементов равно указанной строку то вернет результат) /Запрос query("/node()/node()/node()[substring(string(*), 1,2) = 'BM']") - проверяет на совпадение указанного условия(если вырезанный кусок строки дочерних элементов равен указанному, вернет результат) /Запрос query("/node()/node()/node()[string-length(string(*)) = 6]")- проверяет на совпадение указанного условия (если строка дочерних элементов равна указанным символам, то вернет результат) */ function viewResult($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName, "; echo "Value: $node->nodeValue<br/>"; } } $document = new domDocument(); $document->load("test.xml"); $xpath = new domXpath($document); viewResult($xpath->query("/node()/node()/node()[string(*) = 'Toyota']")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[normalize-space(' dsds \n') = 'dsds']")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[concat(string(*), 'd') = 'BMWd']")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[starts-with(string(*), 'Toyota')]")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[contains(string(*), 'ota')]")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[substring-before(string(*), 'ota') = 'Toy']")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[substring-after(string(*), 'Toy') = 'ota']")); echo "<br/>-------------------------------------------------------<br/>"; viewResult($xpath->query("/node()/node()/node()[substring(string(*), 1,2) = 'BM']"));
<tr> <td align='center' colspan='2'><input type='checkbox' name='news' id='news'/><label for='news'> Хотите получать новости с сайта?</label></td> </tr> <tr> <td align='center' colspan='2'><input type='submit' value='Отправить'/></td> </tr> </table> </form> </div>"; } ?> <center > <?php $document = new domDocument(); $document->load("content.xml"); $xpath = new domXpath($document); if(isset($_REQUEST["view"])){ $nodelist = $xpath->query("/*/*/".$_REQUEST["view"]."/*"); } else{ $nodelist = $xpath->query("/*/*/*/*"); } for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); $row["$node->nodeName"] = iconv("UTF-8", "CP1251",$node->nodeValue); if(($i+1)%4 == 0){ echo "<a href='".$row["link"]."'><h1>".$row["title"]."</h1></a> <img src='".$row["image"]."'/><h3>Описание</h3>".$row["description"]."<br/>"; } } ?>
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName, "; echo "Value: $node->nodeValue <br/>"; } } $xpath = new domXpath($document); if($xpath->query("/*/noutbuk/*/name[string() = 'Sony S38']")){ viewInfo($xpath->query("/*/noutbuk/*/name[string() = 'Sony S38']")); viewInfo($xpath->query("/*/noutbuk/*/name[string() = 'Sony S38']/following-sibling::year")); } echo "<br />------------------------------------------<br />"; viewInfo($xpath->query("/*/*/*[contains(string(*), 'Canon')]")); ?>
<?php /*Предикаты функции узлов урок 25 ***Функции узлов 1) Функция position() - возвращает номер позиции узла из массива-списка (номерация идет от 1, а не от 0) 2) Фугкция last() - возвращает длину массива-списка 3) Функция count(node-set) - возвращает количество узлов в node-set(то есть в указанном параметре) 4) Функция name(node-set) - возвращает имя 1-го узла в node-set(в указанном параметре) /ПРЕДИКАТЫ УКАЗЫВАЕМ В КВАДРАТНЫХ СКОБКАХ [] */ function viewResult($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName, "; echo "Value: $node->nodeValue<br/>"; } } $document = new domDocument(); $document->load("test.xml"); $xpath = new domXpath($document); viewResult($xpath->query("/*/*/*[position() = 2]")); echo "<br />--------------------------------<br/>"; viewResult($xpath->query("/*/*/*[last() = 2]")); echo "<br />--------------------------------<br/>"; viewResult($xpath->query("/*[count(gar:garage) = 1]")); echo "<br />--------------------------------<br/>"; viewResult($xpath->query("/node()[name(*) = 'gar:garage']")); ?>
public function run($new = Null) { if (is_a($new, jqmel)) { return $this->done = $new === $this->node; } elseif (is_callable($new)) { return $this->done = call_user_func($new, $this->node) == true; } else { $query = $this->match_selector($new, 'self::', false); } $attr = $this->node->data('_attributes')->get(); $path = $this->node->data('_path')->get(); $ns = $this->node->data('_parentElement')->get(); $tag = $this->node->data('_name')->get(); $done = false; $d = jqm_use($ns); $this->query_arg = $query; if (array_key_exists('button', $query['filters'])) { if (!in_array($tag, array('input', 'button'))) { return $this->done = false; } if ($tag == 'input' and !array_key_exists('type', $attr)) { return $this->done = false; } if ($tag == 'input' and $attr['type'] !== 'button') { return $this->done = false; } } if (array_key_exists('header', $query['filters'])) { $regex = '/h1|h2|h3|h4|h5|h6|h[1-9]/ix'; if (preg_match($regex, $tag) == false) { return $this->done = false; } } if (array_key_exists('first', $query['filters'])) { if (!isset($this->node->trace)) { $this->done = true; } else { $i = key($this->node->trace); $first = $this->node->trace[$i]; if ($first !== $this->node) { return $this->done = false; } } } if (array_key_exists('last', $query['filters'])) { if (!isset($this->node->trace)) { $this->done = true; } else { $last = end($this->node->trace); if ($last !== $this->node) { return $this->done = false; } } } if (array_key_exists('checked', $query['filters'])) { if ($tag !== 'input') { return $this->done = false; } if (!in_array($attr['type'], array('radio', 'checkbox'))) { return $this->done = false; } } if (array_key_exists('file', $query['filters'])) { if ($tag !== 'input') { return $this->done = false; } if ($attr['type'] !== 'file') { return $this->done = false; } } if (array_key_exists('text', $query['filters'])) { if ($tag !== 'input') { return $this->done = false; } if ($attr['type'] !== 'text') { return $this->done = false; } } if (array_key_exists('submit', $query['filters'])) { if (!in_array($tag, array('input', 'button'))) { return $this->done = false; } if ($attr['type'] !== 'submit') { return $this->done = false; } } if (array_key_exists('checkbox', $query['filters'])) { if ($tag !== 'input') { return $this->done = false; } if ($attr['type'] !== 'checkbox') { return $this->done = false; } } if (array_key_exists('radio', $query['filters'])) { if ($tag !== 'input') { return $this->done = false; } if ($attr['type'] !== 'radio') { return $this->done = false; } } if (array_key_exists('selected', $query['filters'])) { if ($tag !== 'option') { return $this->done = false; } if (!array_key_exists('selected', $attr)) { return $this->done = false; } $query['filters']['parent'] = 'select'; } if (array_key_exists('has', $query['filters'])) { $html = $this->node->html()->get(); if (empty($html) || strip_tags($html) == $html) { return $this->done = false; } if (!empty($query['filters']['has'])) { if (preg_match('/<(' . $query['filters']['has'] . ')\\b(.*?)>(?:(.*?)(<\\/\\1>))?/ix', $html) == false) { return $this->done = false; } } } if (array_key_exists('disabled', $query['filters']) and !array_key_exists('disabled', $attr)) { return $this->done = false; } if (array_key_exists('contains', $query['filters'])) { $html = $this->node->html()->get(); $html = strip_tags($html); if (empty($html)) { return $this->done = false; } if (!empty($query['filters']['contains'])) { if (strpos($html, jqueryphp_abstracts_element::escape($query['filters']['contains'])) === false) { return $this->done = false; } } } if (array_key_exists('visible', $query['filters'])) { if ($this->isHidden() === true) { return $this->done = false; } } if (array_key_exists('hidden', $query['filters'])) { if ($this->isHidden() === false) { return $this->done = false; } } if (array_key_exists('only-child', $query['filters'])) { $doc = $d->_DOM; $xpath = new domXpath($doc); $node = $xpath->query($path); if ($node->length < 1) { return $this->done = false; } if (!$node->item(0)->parentNode) { return $this->done = false; } if (!$node->item(0)->parentNode->childNodes) { return $this->done = false; } if ($node->item(0)->parentNode->childNodes->length > 1) { return $this->done = false; } } if (array_key_exists('nth-child', $query['filters'])) { if ($query['filters']['nth-child'] == NULL || strlen($query['filters']['nth-child']) === 0) { return $this->done = false; } $pos = strrpos($path, '['); if ($pos === false) { return $this->done = false; } if ($pos == strlen($path) - 1) { return $this->done = false; } $pos = trim(substr($path, $pos), '[]'); if (!is_numeric($pos)) { return $this->done = false; } $pos = (int) $pos; if (is_numeric($query['filters']['nth-child'])) { if ((int) $query['filters']['nth-child'] < 1) { return $this->done = false; } if ($pos !== (int) $query['filters']['nth-child']) { return $this->done = false; } } elseif ($query['filters']['nth-child'] === 'even') { if (($pos % 2 == 0) == false) { return $this->done = false; } } elseif ($query['filters']['nth-child'] === 'odd') { if (($pos % 2 == 0) == true) { return $this->done = false; } } else { return $this->done = false; } } if (array_key_exists('nth-last-child', $query['filters'])) { $doc = $d->_DOM; $xpath = new domXpath($doc); $node = $xpath->query($path); if ($node->length < 1) { return $this->done = false; } if (!$node->item(0)->parentNode) { return $this->done = false; } $cht = $node->item(0)->parentNode->childNodes->length; if (is_numeric($query['filters']['nth-last-child'])) { $pos = (int) $query['filters']['nth-last-child']; if ($pos < 1) { return $this->done = false; } $pos = $cht - $pos; } elseif (in_array($query['filters']['nth-last-child'], array('even', 'odd'))) { $pos = strrpos($path, '['); if ($pos === false) { return $this->done = false; } if ($pos == strlen($path) - 1) { return $this->done = false; } $pos = trim(substr($path, $pos), '[]'); if (!is_numeric($pos)) { return $this->done = false; } $pos = (int) $pos; if ($query['filters']['nth-last-child'] === 'even') { if ((($cht - $pos) % 2 == 0) === true) { return $this->done = false; } } if ($query['filters']['nth-last-child'] === 'odd') { if ((($cht - $pos) % 2 == 0) === false) { return $this->done = false; } } } else { return $this->done = false; } if ($pos > $cht) { return $this->done = false; } if ($pos < 0) { return $this->done = false; } $chd = $node->item(0)->parentNode->childNodes->item($pos - 1); if (!$chd) { return $this->done = false; } if ($node->item(0)->isSameNode($chd) === false) { return $this->done = false; } unset($chd); } if (array_key_exists('only-of-type', $query['filters'])) { $doc = $d->_DOM; $xpath = new domXpath($doc); $node = $xpath->query($path); if ($node->length < 1) { return $this->done = false; } if ($node->item(0)->childNodes) { if ($node->item(0)->childNodes->length > 0 and $node->item(0)->childNodes->item(0)->nodeType !== 3) { return $this->done = false; } } } if (array_key_exists('first-child', $query['filters'])) { $doc = $d->_DOM; $xpath = new domXpath($doc); $node = $xpath->query($path); if ($node->length < 1) { return $this->done = false; } if (!$node->item(0)->parentNode) { return $this->done = false; } if ($node->item(0)->parentNode->firstChild->isSameNode($node->item(0)) === false) { return $this->done = false; } } if (array_key_exists('last-child', $query['filters'])) { $doc = $d->_DOM; $xpath = new domXpath($doc); $node = $xpath->query($path); if ($node->length < 1) { return $this->done = false; } if (!$node->item(0)->parentNode) { return $this->done = false; } if ($node->item(0)->parentNode->lastChild->isSameNode($node->item(0)) === false) { return $this->done = false; } } if (isset($query['specifier'])) { $v = array_intersect_key($query['specifier'], $attr); if (isset($query['tag'])) { $ipt = explode('|', $query['tag']); if (!in_array($this->node->data('_name')->get(), $ipt)) { return $this->done = false; } } if (count($query['specifier']) > 0 and empty($v)) { return $this->done = false; } } //Find Has attr if (array_key_exists('id', $query['specifier'])) { if ($query['specifier']['id'] !== $v['id']) { return $this->done = false; } } if (array_key_exists('class', $query['specifier'])) { $classes = $v['class']; $hasclass = $this->node->hasClass($classes)->get(); if ($hasclass) { $v['class'] = $attr['class']; } } $this->matched = $v; $v = count(array_intersect($v, $attr)) >= count($query['specifier']); if ($v === false) { return $this->false = true; } if (!empty($query['attributes'])) { $found = false; $attrkeys = array_keys($attr); if (isset($query['attributes']['colExists'])) { $validAttr = array_intersect($query['attributes']['colExists'], $attrkeys); $found = $validAttr; $found = (count($validAttr) > 0 and count($validAttr) === count($query['attributes']['colExists'])); } if (isset($query['attributes']['colNotExists'])) { $validAttr = array_diff($query['attributes']['colNotExists'], $attrkeys); $found = (!empty($found) and $validAttr == $query['attributes']['colNotExists']); } $check = $query['attributes']; unset($check['colNotExists']); unset($check['colExists']); if (isset($check) and is_array($check) and !empty($check)) { $found = $this->matchAttributeSelectors($check, $attr); } if (!$found) { $this->done = false; return; } } if (!empty($query['filters'])) { $path = $this->node->data('_path')->get(); if (array_key_exists('empty', $query['filters'])) { $inner = $this->node->data('_innerHtml')->get(); if (!empty($inner)) { return $this->done = false; } } if (array_key_exists('parent', $query['filters'])) { if (isset($query['filters']['parent']) and !empty($query['filters']['parent'])) { $parents = explode('/', $path); array_pop($parents); $ps = strpos(end($parents), $query['filters']['parent']); if ($ps === false) { $this->done = false; } return; if ($ps !== 0) { $this->done = false; return; } } $inner = $this->node->data('_innerHtml')->get(); if (empty($inner)) { return $this->done = false; } if (strlen($inner) < 1) { $this->done = false; return; } $this->done = true; } if (strripos($path, ']') == strlen($path) - 1) { $path = substr($path, strripos($path, '[')); if (preg_match('/\\[(\\d)\\]/', $path, $match)) { $path = $match[1]; } else { $path = 1; } } else { $path = 1; } if (is_numeric($path)) { $i = (int) $path - 1; unset($path); if ($i < 0) { $this->done = false; return; } if (array_key_exists('eq', $query['filters']) and is_numeric($query['filters']['eq'])) { if ($query['filters']['eq'] != $i) { $this->done = false; return; } } if (array_key_exists('gt', $query['filters']) and is_numeric($query['filters']['gt'])) { if ($i > (int) $query['filters']['gt'] == false) { $this->done = false; return; } } if (array_key_exists('lt', $query['filters']) and is_numeric($query['filters']['lt'])) { if ($i < (int) $query['filters']['lt'] == false) { $this->done = false; return; } } if (array_key_exists('odd', $query['filters'])) { if (($i % 2 == 0) == true) { $this->done = false; return; } } if (array_key_exists('even', $query['filters'])) { if (($i % 2 == 0) == false) { $this->done = false; return; } } } } return $this->done = true; }
<?php $doc = new domdocument(); $doc->load('data.rss'); $ctx = new domXpath($doc); $node = $ctx->query('/rss/channel/item/title/text()'); echo 'Title: '; echo $node[0]->nodeValue; echo "\n";
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist) { for ($i = 0; $i < $nodelist->length; $i++) { $node = $nodelist->item($i); echo "Name: {$node->nodeName} <br/>"; echo "Value: {$node->nodeValue} <br/>"; } } $xpath = new domXpath($document); viewInfo($xpath->query("/*/self::*")); viewInfo($xpath->query("*/attribute::*")); viewInfo($xpath->query("namespace::*"));
<?php $document = new domDocument(); $document->load("test3.xml"); function viewInfo($nodelist){ for($i=0; $i<$nodelist->length; $i++){ $node = $nodelist->item($i); echo "Name: $node->nodeName, "; echo "Value: $node->nodeValue <br/>"; } } $xpath = new domXpath($document); viewInfo($xpath->query("/*/*/*/name[string-length() mod 2 = 0]")); echo "<br />------------------<br />"; viewInfo($xpath->query("/*/*/*/*[position() = 3 and round(string())>2000]/../*[position() = 1]")); ?>