@fattan
программист

Как работать с Atom.xml + XSL?

Хочу Атом блога с Гугл блоггера обработать с помощью XSL. PHPShtorm мне подсвечивает ошибку "uri is not registered" для рут-элемента:

<?xml version='1.0' encoding='UTF-8'?>

<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'
      xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss'
      xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'>


То есть каждый из параметров ( xmlns:blogger xmlns:gd ...) ему не нравится. Пробовал переходить по ссылкам - только одна работает.

Далее идут пространства имен в коде, которые определены выше:

<thr:total>0</thr:total>
        <gd:extendedProperty name="commentSource" value="1"/>


В итоге если просто вырезать определения, парсер ругается, что неизвестные пространства имен присутствуют - что логично. А если оставить всё как есть, парсер не видит всё что внутри

То есть пишешь в XSL:
<xsl:for-each select="//entry">
                    <xsl:sort order="descending" select="."/> йцукен

                </xsl:for-each>


А оно просто не видится. Удаляешь uri из фида - цикл работает, но на пространства имен выдается ошибка.

Как тут быть-то?
Юзаю парсер браузеров и парсер встроенный в php.
  • Вопрос задан
  • 829 просмотров
Решения вопроса 1
@fattan Автор вопроса
программист
Эврика:
Вся магия в нэймспейсах.
своровал решение отсюда

В xls нужно объяснить что это Atom и юзать его пространство имён

<?xml version="1.0" encoding="utf-8"?>
<x:stylesheet version="1.0"
                xmlns:atom="http://www.w3.org/2005/Atom"
                xmlns:x="http://www.w3.org/1999/XSL/Transform">
    <x:output
            method="html"
            media-type="text/html"
            indent="yes"
            encoding="UTF-8"/>

    <x:template match="/atom:feed">
        <x:text disable-output-escaping='yes'>&lt;!DOCTYPE html></x:text>
        <html>
            <head>
                <title>DOCTYPE html 5</title>
            </head>
            <body>
                <x:for-each select="atom:entry">
                    <x:sort order="descending" select="."/>
                    <h2>бла бла бла</h2>
                    Опубликовано: <x:value-of select="atom:published"/><br /> 
                </x:for-each>

            </body>
        </html>
    </x:template>

</x:stylesheet>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы