过滤RSS描述元素中的文本

时间:2014-11-13 19:56:38

标签: xml xslt

我正在通过visual studio制作一个简单的RSS提要阅读器。我使用gridview加载来自feed中每个项目的title和description元素(我仍然开始这个,所以我稍后会加载其他元素)。为了从xml文件中获取我想要的信息,我正在使用以下转换:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

      <xsl:template match="channel">
        <feedinfo>
          <xsl:for-each select="item">
            <title> 
                <xsl:attribute name="title">
                  <xsl:value-of select="title"/>
                </xsl:attribute>
                <xsl:attribute name="description">
                  <xsl:value-of select="description"/>
                </xsl:attribute>
            </title>
          </xsl:for-each>
        </feedinfo>
    </xsl:template>
</xsl:stylesheet>

它获取了我想要的信息,但描述中存在一些问题:它还复制了描述中的img部分。

示例:Obra do ex-ministro da Economia promete explicar“que interesseselóbistevede enfrentar”durante a sua passagem pelo executivo。 http://feeds.feedburner.com/~r/PublicoRSS/~4/RJMEyUlkY0w“height =”1“width =”1“

如何过滤掉这部分说明?

在rss feed中,description元素如下:

<description>Obra do ex-ministro da Economia promete explicar "que interesses e lóbis teve de enfrentar" durante a sua passagem pelo executivo.<img src="http://feeds.feedburner.com/~r/PublicoRSS/~4/RJMEyUlkY0w" height="1" width="1"/>;</description>

编辑:

以下是输入的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Publico.pt - Geral</title>
    <link>http://www.publico.pt</link>
    <description>Descrição</description>
    <copyright>© 2014 PÚBLICO Comunicação Social SA</copyright>
    <language>pt-pt</language>
    <lastBuildDate>Thu, 13 Nov 2014 18:11:30 GMT</lastBuildDate>
    <category>Geral</category>
    <ttl>5</ttl>
    <managingEditor>ultimahora@publico.pt (Última Hora)</managingEditor>
    <webMaster>webmaster@publico.pt (Webmaster)</webMaster>
    <image>
      <url>http://static.publico.pt/files/header/img/publico.png</url>
      <title>Publico.pt - Escolha do Editor</title>
      <link>http://www.publico.pt</link>
      <width>85</width>
    </image>
    <item>
      <title>EUA acusam Rússia de "alimentar conflito" na Ucrânia na 26.º reunião do Conselho de Segurança</title>
      <description>Reunião de emergência convocada pelos Estados Unidos serviu apenas para nova troca de acusações. Veículo que serve para transportar militares russos mortos em combate foi avistado a entrar na Ucrânia, diz a OSCE.&lt;img src="http://feeds.feedburner.com/~r/PublicoRSS/~4/0yBAvZhqVpI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/PublicoRSS/~3/0yBAvZhqVpI/eua-acusam-russia-de-alimentar-conflito-na-ucrania-na-26-reuniao-do-conselho-de-seguranca-1676173</link>
      <category>Mundo</category>
      <pubDate>Thu, 13 Nov 2014 18:07:14 GMT</pubDate>
      <dc:creator>Alexandre Martins</dc:creator>
      <guid isPermaLink="false">http://www.publico.pt/mundo/noticia/eua-acusam-russia-de-alimentar-conflito-na-ucrania-na-26-reuniao-do-conselho-de-seguranca-1676173</guid>
    <feedburner:origLink>http://www.publico.pt/mundo/noticia/eua-acusam-russia-de-alimentar-conflito-na-ucrania-na-26-reuniao-do-conselho-de-seguranca-1676173</feedburner:origLink></item>
 </channel>
</rss>

1 个答案:

答案 0 :(得分:0)

您没有向我们展示源XML或处理description元素的XSLT部分。因此很难为您提供与您的上下文匹配的精确代码。如果您执行以下操作:

<xsl:value-of select="description"/>

您应该只返回description的文本节点后代。


编辑:

之间存在非常大的差异:

<description>Obra do ex-ministro da Economia promete explicar "que interesses e lóbis teve de enfrentar" durante a sua passagem pelo executivo.<img src="http://feeds.feedburner.com/~r/PublicoRSS/~4/RJMEyUlkY0w" height="1" width="1"/>;</description>

<description>Reunião de emergência convocada pelos Estados Unidos serviu apenas para nova troca de acusações. Veículo que serve para transportar militares russos mortos em combate foi avistado a entrar na Ucrânia, diz a OSCE.&lt;img src="http://feeds.feedburner.com/~r/PublicoRSS/~4/0yBAvZhqVpI" height="1" width="1"/&gt;</description>

在第一个示例中,<img>是元素中的单独节点。在第二个示例中,图像是<description>的文本内容的组成部分。没有XPath表达式可以与图像部分分开处理文本,反之亦然。您需要求助于使用字符串函数解析文本。如果您可以假设整个文本位于图像部分(或任何其他转义的嵌套元素)之前,则可以使用:

<xsl:value-of select="substring-before(description, '&lt;')"/>

得到它。否则,您需要使用递归命名模板来绕过&#34;绕过&#34;嵌套在文本中的所有这些转义元素。