Изменение таблицы стилей XSLT для получения некоторых тегов, которые исчезли после преобразования

#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>