Парсер xml с data

[Удален]
413

Здравствуйте. Из-за моего малого опыта возникла проблема.

Использую API Метрика.Яндекс. Ключевые слова записаны в виде "<phrase><![CDATA[кракозябра]]></phrase>>".

Для его поиска использую:


$key = $row->getElementsByTagName('phrase')->item(0)->nodeValue;
if ($key == "кракозябра"){
echo "you win";
}

но такого ключевого слова он не находит. видимо из-за того что ключ представлен как обычный текст а не разметка, не получается его найти.

Вот собсвенно и вопрос, как мне присвоить ключи и задать условия?

ДП
На сайте с 23.11.2009
Offline
203
#1

А кодировка скрипта и xml совпадают? А то может сравниваете в разных кодировках?

Ну и как вариант вывести $key - посмотреть что там хранится.

[Удален]
#2
Дикий пионер:
А кодировка скрипта и xml совпадают? А то может сравниваете в разных кодировках?
Ну и как вариант вывести $key - посмотреть что там хранится.

вывел кей, все фразы сохраняются нормально...

заменил ключ "кракозябра" на "krakozyabra" (в живом примере это не аналогичный запрос транслитом, а совсем другой запрос, просто он пишется латиницей), все получилось...

теперь другой вопрос: как сделать так, чтобы он нормально сравнивал кириллические запросы ?:)

Привожу примеры что имею на данный момент:

1) Не работает


<row>
<phrase>
<![CDATA[рубим бабло]]>
</phrase>
</row>


$xml = DOMDocument::load($url);
$list = $xml->getElementsByTagName("row");
foreach($list as $row){
$key = $row->getElementsByTagName('phrase')->item(0)->nodeValue;
if ($key == "рубим бабло"){
$visits = $row->getElementsByTagName('visits')->item(0)->nodeValue;
echo "win";
}
}

2) Работает


<row>
<phrase>
<![CDATA[samsung]]>
</phrase>
</row>


$xml = DOMDocument::load($url);
$list = $xml->getElementsByTagName("row");
foreach($list as $row){
$key = $row->getElementsByTagName('phrase')->item(0)->nodeValue;
if ($key == "samsung"){
$visits = $row->getElementsByTagName('visits')->item(0)->nodeValue;
echo "win";
}
}
ДП
На сайте с 23.11.2009
Offline
203
#3

Кодировки-то сравнили?

В xml обычно utf-8, хотя там в заголовке должно быть написано в какой он кодировке. Как узнаете - iconv вам в помощь.

[Удален]
#4
Дикий пионер:
Кодировки-то сравнили?
В xml обычно utf-8, хотя там в заголовке должно быть написано в какой он кодировке. Как узнаете - iconv вам в помощь.

спасибо. сохранил свой php в utf8 без bom. все работает

ДП
На сайте с 23.11.2009
Offline
203
#5

Хм, вроде обновлял страничку перед ответом, ну ладно, пусть и мой код повисит.


<?php
$xml = new DOMDocument('1.0', 'utf-8');
$xml->loadXML(file_get_contents("./data.xml"));
$list = $xml->getElementsByTagName("row");
foreach ($list as $row) {
$key = trim($row->getElementsByTagName('phrase')->item(0)->nodeValue);
echo $key."\r\n";
if ($key == "рубим бабло") {
// $visits = $row->getElementsByTagName('visits')->item(0)->nodeValue;
echo "win";
}
if ($key == "samsung") {
// $visits = $row->getElementsByTagName('visits')->item(0)->nodeValue;
echo "swin";
}
}

Вот так у меня лично заработало.

А у вас встроенный DomDocument?а то мне что-то php на вызов ::load() ругнулся, что они нифига не статический.

Ну и как это победите - почитайте про xpath, а то, на мой взгляд, у вас не особо эффективно выборка идет.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий