我正在通过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.<img src="http://feeds.feedburner.com/~r/PublicoRSS/~4/0yBAvZhqVpI" height="1" width="1"/></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>
答案 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.<img src="http://feeds.feedburner.com/~r/PublicoRSS/~4/0yBAvZhqVpI" height="1" width="1"/></description>
在第一个示例中,<img>
是元素中的单独节点。在第二个示例中,图像是<description>
的文本内容的组成部分。没有XPath表达式可以与图像部分分开处理文本,反之亦然。您需要求助于使用字符串函数解析文本。如果您可以假设整个文本位于图像部分(或任何其他转义的嵌套元素)之前,则可以使用:
<xsl:value-of select="substring-before(description, '<')"/>
得到它。否则,您需要使用递归命名模板来绕过&#34;绕过&#34;嵌套在文本中的所有这些转义元素。