XSLT RSS FEED - объединение подстроки до и подстроки после - PullRequest
0 голосов
/ 24 февраля 2011

Заранее извиняюсь, если этот вопрос действительно прост, но я не могу найти способ обойти эту проблему.

Мне нужен способ объединить функцию substring-before и substring-after вxsl, поэтому у меня есть начальная и конечная точки в элементе описания RSS-канала.

В каждом теге описания я хочу извлечь все из «Первичного заголовка» и далее, но остановиться, как только он достигнет первого *Тег 1005 *.

Я попробовал следующий xsl без особого успеха

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="channel">
<xsl:for-each select="item">


<xsl:value-of select=substring-after(description, 'Primary Title:' />

<xsl:value-of select=substring-before(description, '&ltb&gt' />



</xsl:for-each>

</xsl:template>
</xsl:stylesheet>

Ниже приведен XML, с которым я сейчас работаю.

<rss version="2.0">
  <channel>
    <item>
      <title>Article_110224_081057</title>
    <description>
<![CDATA[<div><b>Description:</b>This is my description<b>Primary Title:</b>This is my primary title<b>Second Title:</b>This is my second title title </div>
]]>
</description>
    </item>
    <item>
      <title>Article_110224_081057</title>  
     <description>
<![CDATA[<div><b>Description:</b>This is my description<b>Other Title:</b>This is my other title<b>Second Title:</b>This is my second title titleb<b>Primary Title:</b>This is my primary title<b> more text </div>
]]>
</description>
    </item>
  </channel>
</rss> 

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Если <b> является тегом, вы не сможете найти его с помощью сопоставления подстроки, потому что парсер превращает теги в узлы. Вы сможете сопоставить его как подстроку, только если он не является тегом, например, потому что он содержался в разделе CDATA (что, как представляется, имеет место в вашем примере). *

1 голос
/ 24 февраля 2011

Может быть, это может помочь:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="channel">
        <xsl:for-each select="item">
            <xsl:value-of select="
                substring-after(
                    substring-before(
                        substring-after(description, 'Primary Title:'),
                        '&lt;b'
                    ),
                    'b&gt;'
                )
                "/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Результат по вашему образцу:

This is my primary titleThis is my primary title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...