#php #xml #xslt
#php #xml #xslt
Вопрос:
Я преобразовываю некоторые RSS-каналы XML с помощью XSLT. В основном я редактирую два типа :
1. <rss><channel>some tags about the RSS<item></item></channel></rss>
2. <feed>some tags about the RSS<entry></entry></feed>
использование этой таблицы стилей. (Он получает некоторые файлы из paths.xml файл)
<xsl:stylesheet version="1.0" xmlns:f="http://www.w3.org/2005/Atom" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/*">
<NEWrss>
<xsl:for-each select="file">
<xsl:apply-templates
select="document(.)/*//channel | document(.)/f:feed/f:entry">
<xsl:with-param name="file" select="."/>
</xsl:apply-templates>
</xsl:for-each>
</NEWrss>
</xsl:template>
В первом RSS я правильно получаю выходные данные с тегами между <channel>
и первым <item>
. Это некоторые теги, которые содержат информацию о блоге, например, заголовок.
Однако во втором случае эти теги (заголовок блога …, найденный между первым <feed>
и первым <entry>
) исчезли после преобразования. Теги в отображались правильно.
Мой вопрос в том, как я могу получить и эти теги?
Образец фида, подобный 2-й структуре, http://feeds .feedburner.com/EFENPRESS —
Спасибо.
Комментарии:
1. Итак, что представляет собой каждый из исходных XML-документов и какой точный результат требуется на выходе? Все остальное — просто шум …
Ответ №1:
Я думаю, вы хотите сказать, что вы не видите текст, предшествующий элементу f:feed . Это потому, что ваш оператор select не включает его — он только выбирает f:feed/f:entry и элементы канала. Возможно, вам следует попробовать обработать f:feed вместо f:feed/f:entry ? или f:feed/node (), который выберет оба f:feed/text () и f: подача()/ f: ввод.
Ответ №2:
Похоже, проблема с пространством имен. Вы используете префикс пространства имен «f» для доступа к элементам feed и entry, но не очевидно, что эти элементы действительно находятся в этом пространстве имен. (И на самом деле элемент entry пуст, поэтому доступ к нему не приведет к отображению какого-либо содержимого)
Комментарии:
1. Вы упоминаете «первую запись», что наводит на мысль, что существует несколько элементов ввода. Есть только один. Его открывающий тег — <entry> , его закрывающий тег — </entry> , а его содержимое — это все промежуточное (т. Е. Ничего).
2. Я получаю все содержимое между
<entry></entry>
Я не получаю теги между<feed>
и первым<entry>