Как разобрать термин категории из ленты WordPress ATOM в PHP?

У меня есть стандартная подача ATOM из экземпляра WordPress. В ленте отображаются следующие элементы категории:

<category scheme="http://alpha-s2new.simplescienceinc.com/blog" term="Blog" />
<category scheme="http://alpha-s2new.simplescienceinc.com/blog" term="Mobile" />
<category scheme="http://alpha-s2new.simplescienceinc.com/blog" term="Websites" />

Я использую следующий код для разбора канала:

foreach ($rss->getElementsByTagName('entry') as $node) {
$item = array(
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'desc' => $node->getElementsByTagName('content')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'date' => $node->getElementsByTagName('updated')->item(0)->nodeValue,
'author' => $node->getElementsByTagName('name')->item(0)->nodeValue,
'postid' => $node->getElementsByTagName('id')->item(0)->nodeValue,
'cats' => $node->getElementsByTagName('category')->item(0)->nodeValue
);
array_push($feed, $item);
}

Как вы можете видеть … последний элемент тянет узел «категория». Но он возвращает пустую строку. И я думаю, что знаю почему. Таким образом, вопрос заключается в том, какой синтаксис используется для обозначения терминов.

0

Решение

term это атрибут, поэтому вам нужно использовать getAttribute чтобы получить данные из него. Например:

// $dom is the DOMDocument object holding the XML
$cats = $dom->getElementsByTagName('category');
foreach ($cats as $c) {
echo "term: " . $c->getAttribute('term') . PHP_EOL;
}

Выход:

term: Blog
term: Mobile
term: Websites

Если вы используете $c->nodeValue, вы ничего не получите, потому что у узла нет значения — он пуст. Чтобы получить атрибут термина первой категории, вам нужно заменить текущую строку следующим:

'cats' => $node->getElementsByTagName('category')->item(0)->getAttribute('term')
1

Другие решения

Других решений пока нет …