powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите убрать вложенный элемент img
15 сообщений из 15, страница 1 из 1
Помогите убрать вложенный элемент img
    #36778677
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Я не слишком часто сталкиваюсь с xml поэтому не очень в нем силен, но тут возникла задача убрать рисунки из rss канала. Помогите пожалуйста, а то сильно долго разбираться в этом насколько я понял.
Вобщем вот пример rss

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<item>
    	<title>Заголовок</title>
		<link>Ссылка</link>
        <category>Категория</category>
		<pubDate>Чтв,  05  Авг  2010   14 : 47 : 22  + 0400 </pubDate>
		<description><![CDATA[
<img src="http://css.metalinfo.ru/tmp/1/b/4/1b4ed035ac8b976625ffdedb49198cee.jpg" width="200" height="259" hspace="5" align="left">Текст новости
		]]></description>

Вот текущий xslt

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:dc="http://purl.org/dc/elements/1.1/">
    <xsl:output omit-xml-declaration="yes" method="html" encoding="utf-16"/>

    <xsl:template match='/rss'>
      <h3>
        <xsl:value-of select='channel/title'/>
      </h3>
      <xsl:apply-templates select='channel/item' />
    </xsl:template>

  <xsl:template match='item'>
    <div style='margin:6px;'>
      <strong>
        <a href='{link}'>
          <xsl:value-of select='title'/>
        </a>
      </strong><br/>
      <strong>Дата публикации: </strong>
      <xsl:value-of select='pubDate'/>
      <br/>
      <xsl:value-of select='description' disable-output-escaping='yes'/>
      <xsl:text disable-output-escaping='yes'>&nbsp;</xsl:text>
      <a href='{link}'>Читать дальше...</a><br/>
      <xsl:if test='dc:creator'>
        <strong>Автор: </strong><xsl:value-of select='dc:creator'/>
        <br/>
      </xsl:if>
    </div>
  </xsl:template>
  <xsl:template match='category'>
    <xsl:value-of select='.'/>
  </xsl:template>
</xsl:stylesheet>

Каким образом можно вобще убрать img, и еще хотелось бы в pubDate оставить только дату, а время убрать. Помогите пожалуйста. Заранее большое спасибо
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36778718
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centraloff,

надо скопировать исходный XML
посмотри xsl:copy и xsl:copy-of
копируй все кроме тега description, или убивай не нужное содержимое тега description
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36778729
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin,

Дак как раз все содержимое description нужно кроме img, ситуация осложняется тем что у img нет закрывающего тега, видимо поэтому xsl:copy не работает, я попробовал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- Обработчик рисунков -->
  <xsl:template match="img">
    <xsl:apply-templates/>
  </xsl:template>

не помогло
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36778756
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centraloff,

если я не ошибаюсь, то <![CDATA[....]]> подразумевается как содержимое тега description
т.е. ты img не можешь обработать как тег, его надо обрабатывать как текст.
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36778776
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_Demin,

Вот тут находится xml http://www.metalinfo.ru/ru/news/rnonferrous.rss
нельзя ли поподробнее как это сделать, а то если честно я пробовал убрать весь description он даже его целиком не убирает. Спасибо большое.
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36778879
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centraloff,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 <xsl:template match="*">
   <xsl:copy>
		<xsl:apply-templates select="@* | node() "/>
   </xsl:copy>
 </xsl:template>

 <xsl:template match="@*">
  <xsl:copy-of select="." />
</xsl:template>

 <xsl:template match="node()[name()='description']">
		<xsl:text></xsl:text>
 </xsl:template>
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779004
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centraloff,

Для всех тегов:

Код: plaintext
1.
2.
3.
4.
5.
<xsl:template match="*" priority="-1">
   <xsl:copy>
       <xsl:copy-of select="@*"/>
       <xsl:apply-templates />
   </xsl:copy>
</xsl:template>

Для pubDate, обрезаем строку

Код: plaintext
1.
2.
3.
4.
5.
<xsl:template match="pubDate">
   <xsl:copy>
       <xsl:copy-of select="@*"/>
       <xsl:value-of select="substring(.,1, 16)" />
   </xsl:copy>
</xsl:template>

Для description - прийдется повозится

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<xsl:template match="description">
   <xsl:copy>
       <xsl:copy-of select="@*"/>
       
       <xsl:call-template name="crop-img">
           <xsl:with-param name="out" select="." />
       </xsl:call-template>
   </xsl:copy>
</xsl:template>

<xsl:template name="crop-img">
   <xsl:param name="out" />

   <xsl:choose>
      <xsl:when test="contains( $out, 'img')">
          <xsl:value-of select="subsctring-before( $out, '<img' )" />
          <xsl:call-template name="crop-img">
              <xsl:with-param name="out" select="subsctring-after( $out, '>' )" />
          </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
         <xsl:value-of select="$out" />
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>

ну а это должно быть так, если конечно кроме img у тебя нет других "невалидных" тегов в CDATA
Код: plaintext
<xsl:output method="xml" encoding="utf-16"/>
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779010
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в строковых функциях вместо < и > должны быть соответственно &lt; и &gt;
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779439
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andry Trushin,

Огромное вам спасибо, очень помогли, правда я в итоге сделал более простое, но менее универсальное решение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <xsl:output omit-xml-declaration="yes" method="html" encoding="utf-16"/>

  <xsl:template match="/rss">
    <h3>
      <xsl:value-of select="channel/title"/>
    </h3>
    <xsl:apply-templates select="channel/item"/>
  </xsl:template>

  <xsl:template match="item">
      <p>
        <strong>
          <a href="{link}">
            <xsl:value-of select="title"/>
          </a>
        </strong>
        <br/>
        <strong>Дата публикации: </strong>
        <xsl:apply-templates select="pubDate"/>
        <br/>
        <xsl:apply-templates select="description"/>
        <a href="{link}">Читать дальше...</a>
        <br/>
      </p>
  </xsl:template>
  <xsl:template match="description">
    <xsl:value-of select="substring-after(.,'>')" disable-output-escaping="yes"/>
  </xsl:template>

  <xsl:template match="pubDate">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:value-of select="substring(.,1, 16)" />
    </xsl:copy>
  </xsl:template> 
</xsl:stylesheet>

Только возникла еще одна проблема, каким образом можно вернуть первые пять записей, попробовал сделать так:
Код: plaintext
1.
<xsl:apply-templates select="channel/item [ position() < 5 ]"/>

Но студия ругается, что тег не закрыт, хотя на форумах советуют делать именно так, не подскажете как обойти это?
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779493
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Centraloff,

Все решил и эту проблему. Теперь все отлично ))
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779496
walek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Centraloff,

Код: plaintext
<xsl:apply-templates select="channel/item [ position() < 5 ]"/>
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779498
walek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Centraloff,

<xsl:apply-templates select="channel/item [ position() < 5 ]"/>
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779503
walek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот чёрт, форум экранирует &lt ;
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36779507
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
walek,

Хыы & lt ; тока все без пробелов
...
Рейтинг: 0 / 0
Помогите убрать вложенный элемент img
    #36780288
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Centraloffне помоглоПоменяйте эти два шаблона местами
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите убрать вложенный элемент img
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]