note 113248 added to domxpath.query
| From: | RiKdnUa at mail dot ru | 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