XSLT新手问题。 我想使用xslt从rss文件创建一个html列表。 我能够使用rss文件和xslt文件这样做。
但是现在我尝试创建输出为空的html列表。
这是我目前的代码:
string xmlsrc = "http://.../News.rss";
string Password = "myPass";
string UserAccount = "myAcc";
string DomainName = "myDom";
string xslsrc = "RSS91.xslt";
if (xmlsrc != "")
{
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(xmlsrc);
if (UserAccount != "")
{
wr.Credentials = new NetworkCredential(UserAccount, Password, DomainName);
}
wr.Timeout = 10000;
WebResponse resp = wr.GetResponse();
Stream stream = resp.GetResponseStream();
XmlTextReader reader = new XmlTextReader(stream);
reader.XmlResolver = null;
XmlDocument doc = new XmlDocument();
doc.Load(reader);
xmlRSS.Document = doc;
}
xmlRSS.TransformSource = xslsrc;
我的XSLT
<?xml version="1.0" encoding="iso-8859-1"?>
<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="html" indent="yes" encoding="iso-8859-1" />
<xsl:template match="/">
<xsl:for-each select="menus">
<ul>
<xsl:for-each select="menu">
<li>
<a href="{title}">
<xsl:value-of select="title" />
</a>
<ul>
<xsl:for-each select="submenu">
<li>
<a href="{title}">
<xsl:value-of select="title" />
</a>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:for-each>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:3)
您拥有的XSLT似乎没有用于处理RSS文件的模板。
如果您的RSS文件具有以下结构:
/rss
/channel
/item
/title
/link
/channel
/item
/title
/link
您可以生成一个列表,打印指向您的XSLT menus
替换为[{1}},rss
menu
和channel
替换的Feed的链接{ {1}}。此外,您的submenu
指的是文字而非链接,因此请将item
替换为href
。此模板可能有效:
href="{title}"
你可能还有问题。可能存在href="{link}"
或<xsl:template match="/">
<xsl:for-each select="rss">
<ul>
<xsl:for-each select="channel">
<li>
<a href="{link}">
<xsl:value-of select="title" />
</a>
<ul>
<xsl:for-each select="item">
<li>
<a href="{link}">
<xsl:value-of select="title" />
</a>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:for-each>
</xsl:template>
等命名空间,或者您的根元素可能是atom
而不是feedburner
。对于名称空间,您应该将它们添加到标题中:
channel
为避免不同根元素出现问题,请使模板与rss
匹配,并使用<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"
xmlns:atom10="http://www.w3.org/2005/Atom"
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"> ...
构建HTML结构。这是一个完整的样式表。如果channel
有根文件中有多个频道,它将打印一个列表,其中包含包含这些项目的子列表。如果您有一个/
根,它也可以工作,打印唯一的列表项,并将其rss项目放在子列表中。
<rss>