rss Xml путаница пространства имен

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:jskit="http://purl.org/dc/elements/1.1/" > <channel> <title>www.domain.com/page_735.htm comments</title> <link>http://www.domain.com/page_735.html</link> <atom:link rel="self" type="application/rss+xml" href="http://js-kit.com/rss/domain.com/page_735.html"></atom:link> <jskit:attribute key="md5path" value="eb7110ce84f5907c29f0717c171ad35e"></jskit:attribute> <jskit:attribute key="path" value="/page_735.html"></jskit:attribute> <description>RSS comments feed for www.domain.com/page_735.html</description> <generator>JS-Kit Bulk Site Exporter 0.8</generator> <lastBuildDate>Mon, 09 Nov 2009 10:35:47 +0000</lastBuildDate> <item> <guid>jsid-1259747304-188</guid> <pubDate>Wed, 02 Dec 2009 09:48:24 +0000</pubDate> <jskit:attribute key="IP" value="59.182.xxx.xxx"></jskit:attribute> <jskit:attribute key="permalink" value="http://www.domain.com/page_735.html"></jskit:attribute> <author>guest</author> <jskit:attribute key="share_facebook" value="off"></jskit:attribute> <jskit:attribute key="share_gfc" value="off"></jskit:attribute> <jskit:attribute key="share_twitter" value="off"></jskit:attribute> <jskit:attribute key="share_friendfeed" value="off"></jskit:attribute> <jskit:attribute key="share_yahoo" value="off"></jskit:attribute> <jskit:attribute key="Webpresence" value="[]"></jskit:attribute> <description>im a disco dancer</description> <jskit:parent-guid>jsid-1250154466-622</jskit:parent-guid> </item> </channel> </rss> 

Я знаю немного xml, но это один путь за пределами моего воображения 🙁

Как я могу извлечь значение permalink или IP или parent-guid

Я могу только извлечь guid, pubdate, author и description

Я не могу определить пространства имен

Если вы используете парсер без пространства имен, тогда у вас будут только имена элементов с двоеточиями. Если вы используете парсер, ориентированный на пространство имен, вам нужно будет указать часть после двоеточия и URI, определенные для части перед префиксом, сообщая вашему API, какой элемент вы ищете.

например jskit: attribute -> элемент с именем 'attribute' в пространстве имен с именем '' http://purl.org/dc/elements/1.1/ '.

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

Чтобы получить доступ к элементам с именами, вы можете использовать выражение XPath или метод children () SimpleXML. Поскольку «parent-guid» содержит дефис, он записывает имя свойства немного неудобно.

Вот рабочий пример:

 function attr(SimpleXMLElement $item, $key) { $values = $item->xpath('./jskit:attribute[@key="' . $key . '"]/@value'); return $values[0]; } $rss = simplexml_load_string($xml); foreach ($rss->channel->item as $item) { $permalink = attr($item, 'permalink'); // either $parent_guid = $item->children('http://purl.org/dc/elements/1.1/')->{'parent-guid'}; // or (PHP 5.2) $parent_guid = $item->children('jskit', true)->{'parent-guid'}; // or $parent_guid = $item->xpath('./jskit:parent-guid'); $parent_guid = $parent_guid[0]; }