Разбор WordPress XML, косая черта: синтаксис комментариев? - PullRequest
2 голосов
/ 11 апреля 2010

Это действительно просто вопрос синтаксиса.

У меня есть PHP-скрипт, который анализирует мой фид WordPress и возвращает последние сообщения. Я также хочу, чтобы мой скрипт анализировал количество комментариев, но в XML-объекте ленты WordPress для количества комментариев есть двоеточие (косая черта: комментарии). Это вызывает следующую ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданная ':' in ... on line ...

Я попробовал каждый из следующих без удачи:

$xml->slash:comments

$comments = 'slash:comments'
$xml->$comments

$xml->slash.':'.comments
$xml->{slash:comments}
$xml->{'slash:comments'}

Как мне разобрать объект с двоеточием?

Ответы [ 3 ]

3 голосов
/ 20 ноября 2010

Кроме того, вы можете использовать xpath () для доступа к узлам. Учитывая следующее как строку xml:

<entry>
  <id>http://gdata.youtube.com/feeds/api/videos/xyz12345678</id>
  <published>2007-01-17T23:41:00.000Z</published>
  <updated>2010-11-14T03:52:25.000Z</updated>
  <yt:location>Mount Washington Observatory, NH</yt:location>
  <media:group>
    <media:title type='plain'>Example of a Title</media:title>
    <media:duration seconds='126'/>
  </media:group>
</entry>

Вы можете сделать это:

$xml = simplexml_load_string(*xmlstring_from_above*);

$location = $xml->xpath('yt:location');
echo($location[0]); // output: "Mount Washington Observatory, NH"

$title = $xml->xpath('media:group/media:title');
echo($title[0]); // output: "Example of a Title"

$duration = $xml->xpath('media:group/media:duration');
echo($duration[0]['seconds']); // output: "126"

Как видите, чтобы получить узлы с двоеточиями, вы можете использовать xpath () с относительным путем к узлу.

0 голосов
/ 11 апреля 2010
$string = file_get_contents("http://domain.tld/?feed=rss2");
$string = str_replace('slash:comments','slashcomments',$string);

$xml = simplexml_load_string($string);

Используйте str_replace, чтобы удалить двоеточия из строки и разрешить функции simplexml_load_string работать как обычно.

Например:

$string = file_get_contents("http://domain.tld/?feed=rss2");
$string = str_replace('slash:comments','slashcomments',$string);
$xml = simplexml_load_string($string);
foreach ($xml->channel->item as $val) {
    echo $val->pubDate.'<br />';
    echo $val->title.'<br />';
    echo $val->slashcomments.'<br /><br />';
}

... должен возвращать дату публикации, заголовок и количество комментариев к сообщениям, перечисленным в ленте WordPress. Мой код более продвинутый, но это иллюстрирует обходной путь.

Спасибо, Арда Си, за помощь!

0 голосов
/ 11 апреля 2010

Переменная в PHP никогда не может содержать двоеточие. Поэтому вы должны проверить свой синтаксический анализатор XML, чтобы увидеть, как он обрабатывает двоеточия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...