2016-08-19 6 views
0

Я поддерживаю сайт для друга, которого я не создал. Он использует Symphony CMS, и мои знания XML/XSLT/XPATH в лучшем случае элементарны. Есть страница, в которой есть раздел подачи Instagram, который недавно остановил отображение изображений и теперь просто показывает текст Alt «Instagram».Выбор данных в RSS-ленте XML-пространство имен с XSLT в Symphony CMS

Соответствующий код из этого шаблона:

<section> 
    ... 
    <xsl:for-each select="instagram/rss/channel/item[position() &lt; '5']"> 
    <div class="one-quarter left"> 
     <img class="border" src="{image/url}" alt="Instagram" /> 
    </div> 
    </xsl:for-each> 
    ... 
</section> 

Источник данных план из этого раздела является Dynamic XML, который черпает из RSS-канал в https://websta.me/rss/n/vubrew:

<rss xmlns:admin="http://webns.net/mvcb/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" version="2.0"> 
    <channel> 
    <title>vubrew's feed - WEBSTA</title> 
    <link>https://widget.websta.me/rss/n/vubrew</link> 
    <description> 
     WEBSTA's RSS Feed - Websta is the best Instagram Web Viewer 
    </description> 
    <dc:language>en</dc:language> 
    <dc:creator>WEBSTA</dc:creator> 
    <pubDate>Fri, 19 Aug 2016 07:01:29 +0900</pubDate> 
    <atom:link href="https://widget.websta.me/rss/n/vubrew" rel="self" type="application/rss+xml"/> 
    <item> 
     <pubDate>Fri, 19 Aug 2016 00:32:44 +0900</pubDate> 
     <title>Fri, 19 Aug 2016 00:32:44 +0900</title> 
     <description> 
     Join Veterans United, Pit Sisters, and The Jed Fund tonight from 6 to 9 for the Mission Pawsible: TAILS kickoff event! There will be a food truck, raffles, and a silent auction, and $1 from every pint sold during the event will be donated to this great cause. 
     </description> 
     <atom:link href="https://websta.me/p/1319648356028404744_761313738"/> 
     <media:thumbnail url="https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/13696890_1570626159907795_1849825203_n.jpg?ig_cache_key=MTMxOTY0ODM1NjAyODQwNDc0NA%3D%3D.2"/> 
     <guid>https://websta.me/p/1319648356028404744_761313738</guid> 
    </item> 
    <item>...</item> 
    ... 
    </channel> 
</rss> 

Из того, что я могу сказать , похоже, что WEBSTA, возможно, недавно изменил формат своего XML-фида, так что {image/url} больше не работает, чтобы выбрать изображения, которые теперь отображаются под пространством имен mediamedia:thumbnail/url.

Я добавил новое пространство имен media в панель управления администратора Symphony для источника данных Instagram с URI http://search.yahoo.com/mrss/. (Другие, указанные в RSS-канале, уже присутствовали.)

Я попытался изменить источник изображения на {thumbnail/url}, который производит тот же результат (только текст Alt) и {media:thumbnail/url}, что приводит к появлению ошибки о недопустимом префикс пространства имен:

XSLTProcessor::transformToXml(): 
    Undefined namespace prefix 
    xmlXPathCompiledEval: evaluation failed 
    XPath evaluation returned no result. 

Попытка подтянуть media URI из http://search.yahoo.com/mrss/ в браузере перенаправляет на главной странице Yahoo, и я нашел некоторую информацию о том, что данная спецификация может быть сохранена в другом месте, но я не могу показаться, найдите альтернативный URI. Поэтому мне интересно, является ли это частью проблемы?

Понятно, что мои знания XML/XSLT/XPATH являются тонкими, поэтому я не уверен, что я просто не укажу элемент правильно или если проблема связана с URI пространства имен мультимедиа, возможно, была перемещена. Я также подумал, что мне может понадобиться как-то обновить Symphony, чтобы распознать новое пространство имен в источнике данных, но я не вижу ничего, что могло бы это сделать.

Буду признателен за понимание.

ответ

1

Я дам ответ с точки зрения XSLT, потому что я не знаю Symphony, но обычно вы объявляете пространства имен в корневом элементе xsl:stylesheet. Например, в данном конкретном случае, это будет выглядеть примерно так:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       version="1.0" 
       xmlns:media="http://search.yahoo.com/mrss/" 
       exclude-result-prefixes="media"> 

Тогда, не должно быть никаких проблем с использованием этого пространства имен в любом месте в XSLT, так что ваш <img> тег будет выглядеть это так (Обратите внимание, что url является атрибут, так что вы должны использовать префикс @ соответственно)

<img class="border" src="{media:thumbnail/@url}" alt="Instagram" /> 

Обратите внимание, что вы можете объявить пространство имен на самом шаблоне тоже, если вы ограничены только разрешают изменять шаблоны в Symphony. Итак, вы можете написать свой шаблон следующим образом:

<xsl:template match="/" xmlns:media="http://search.yahoo.com/mrss/"> 
    <section> 
     <xsl:for-each select="rss/channel/item[position() &lt; 5]"> 
      <div class="one-quarter left"> 
       <img class="border" src="{media:thumbnail/@url}" alt="Instagram" /> 
      </div> 
     </xsl:for-each> 
    </section> 
</xsl:template> 

 Смежные вопросы

  • Нет связанных вопросов^_^