note 113248 added to domxpath.query

From: Date: Tue, 17 Sep 2013 16:26:14 +0000
Subject: note 113248 added to domxpath.query
Groups: php.notes 
Request: Send a blank email to php-notes+get-196282@lists.php.net to get a copy of this message
Пример XPath запроса к XML документу. XML документ содержить элементы с именами из НЕлатинских символов (кириллица). При использовании в XPath запросе предиката, функция DOMXPath::query() выдает предупреждение и запрос не работает. Чтобы запрос работал, надо явно указывать ось. Файл этого примера должен быть в кодировке WINDOWS-1251. Тестировал в PHP 5.2.9-2 и PHP 5.2.17 Example XPath-query to the XML-document. XML-document contains an elements with the names of non-Latin characters (cyrillic). When used predicate in XPath-query, function DOMXPath::query() gives a warning and query does not work. In order to earned the query, it is necessary to explicitly specify the axis. The file of this example is to be in the encoding WINDOWS-1251. Tested in PHP 5.2.9-2 and PHP 5.2.17 <?php ini_set("display_errors","on"); error_reporting(-1); function utf8encode($str){return iconv('WINDOWS-1251', 'UTF-8', $str);} $xml="<?xml version='1.0' encoding='WINDOWS-1251'?> <часть> <ссылка href='yandex.com'>Яндекс</ссылка> <ссылка href='rik.dn.ua/fotopan.php'>г.Донецк</ссылка> </часть> "; $document=new domDocument(); $document->preserveWhiteSpace=false; $document->loadXML($xml); $domxpath=new domXpath($document); $list=$domxpath->query(utf8encode('/child::часть/child::ссылка'));//Ok echo '$list->length='.$list->length."\n<br/>\n"; $list=$domxpath->query(utf8encode('/часть/ссылка'));//Ok echo '$list->length='.$list->length."\n<br/>\n"; $list=$domxpath->query(utf8encode('/child::часть/child::ссылка[position()=1]'));//Ok echo '$list->length='.$list->length."\n<br/>\n"; $list=$domxpath->query(utf8encode('/часть/ссылка[1]'));//Warning: DOMXPath::query() [domxpath.query]: Invalid expression in ... echo '$list->length='.$list->length."\n<br/>\n"; $list=$domxpath->query(utf8encode('/часть/ссылка[position()=1]'));//Warning: DOMXPath::query() [domxpath.query]: Invalid expression in ... echo '$list->length='.$list->length."\n<br/>\n"; ?> ---- Server IP: 193.19.243.212 Probable Submitter: 193.19.243.212 (proxied: 178.216.123.184) ---- Manual Page -- http://php.net/manual/en/domxpath.query.php Edit -- https://master.php.net/note/edit/113248 Del: integrated -- https://master.php.net/note/delete/113248/integrated Del: useless -- https://master.php.net/note/delete/113248/useless Del: bad code -- https://master.php.net/note/delete/113248/bad+code Del: spam -- https://master.php.net/note/delete/113248/spam Del: non-english -- https://master.php.net/note/delete/113248/non-english Del: in docs -- https://master.php.net/note/delete/113248/in+docs Del: other reasons-- https://master.php.net/note/delete/113248 Reject -- https://master.php.net/note/reject/113248 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#196282) next »