我正在尝试使用要提供给Froogle的产品在ASP.NET C#中创建RSS 2.0提要。
RSS Feed应如下所示:
http://www.google.com/support/merchants/bin/answer.py?answer=160589&hl=en
我正在使用SyndicationFeed和SyndicationsItems来创建Feed。但是我无法添加额外的元素,比如g:image_link。
我尝试了额外的元素,如;
syndicationItem.ElementExtensions.Add(new XElement("image_link", product.ImageLink).CreateReader());
这有效,但如何添加命名空间
的xmlns:克= “http://base.google.com/ns/1.0”
到第一个RSS标记并将其用于扩展元素?
谢谢
答案 0 :(得分:1)
XElements具有出色的命名空间支持。像这样创建你的第一个元素:
XNamespace aw = "http://base.google.com/ns/1.0";
XElement root = new XElement(aw + "image_link", product.ImageLink);
这将为您提供如下XML:
<image_link xmlns="http://base.google.com/ns/1.0">
</image_link>
每个后续元素也应使用相同的命名空间。如果要为元素使用名称空间前缀,则采用类似的方法。您可以在这里查看MSDN上的一些完整示例:
答案 1 :(得分:1)
事实上,我上周刚刚写了这样的内容。我没有太多时间,所以它没有优化或漂亮。
但我使用了XDocument。
static XDocument GetXDocument(List<GoogleProduct> googleProducts)
{
XNamespace gns = "http://base.google.com/ns/1.0";
XDocument document = new XDocument(
new XElement("rss",
new XAttribute("version", "2.0"),
new XAttribute(XNamespace.Xmlns + "g", gns),
new XElement("channel",
new XElement("title", "X Company Feed"),
new XElement("description", "X Description"),
new XElement("link", "http://www.somecompany.com/"),
from googleProduct in googleProducts
select new XElement("item",
new XElement("title", googleProduct.Title),
new XElement(gns + "brand", googleProduct.ProductRecommendedAttributes.Brand),
new XElement(gns + "manufacturer", googleProduct.ProductRecommendedAttributes.Manufacturer),
new XElement(gns + "condition", googleProduct.Condition),
new XElement("description", googleProduct.Description),
new XElement(gns + "id", googleProduct.ID),
from img in googleProduct.ProductRecommendedAttributes.ImageLinks
select new XElement(gns + "image_link", img),
new XElement("link", googleProduct.Link),
new XElement(gns + "price", googleProduct.Price.ToString("0.00")),
new XElement(gns + "product_type", googleProduct.ProductRecommendedAttributes.ProductType),
from pmt in googleProduct.ProductOptionalAttributes.PaymentAccepteds
select new XElement(gns + "payment_accepted", pmt)))));
//
return document;
}
(仅供参考:GoogleProduct只是我使用的临时映射器类)
它将沿着这些行生成文档
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Blah Data Feed</title>
<description>Stuff from Blah</description>
<link>http://www.blah.com/shopping</link>
<item>
<title>Blah</title>
<g:brand>Blah</g:brand>
<g:manufacturer>Blah</g:manufacturer>
<g:condition>New</g:condition>
<description>blah blah</description>
<g:id>268</g:id>
<g:image_link>http://www.blah.com/shopping/images/PRODUCT/medium/268.jpg</g:image_link>
<link>http://www.blah.com/</link>
<g:price>1747.00</g:price>
<g:product_type>Blah Blah</g:product_type>
<g:payment_accepted>Cash</g:payment_accepted>
<g:payment_accepted>Check</g:payment_accepted>
<g:payment_accepted>Visa</g:payment_accepted>
<g:payment_accepted>Mastercard</g:payment_accepted>
</item>
<item>
<title>Blah</title>
<g:brand>Blah</g:brand>
<g:manufacturer>Blah</g:manufacturer>
<g:condition>New</g:condition>
<description>blah blah</description>
<g:id>269</g:id>
<g:image_link>http://www.blah.com/shopping/images/PRODUCT/medium/269.jpg</g:image_link>
<link>http://www.blah.com/</link>
<g:price>1103.00</g:price>
<g:product_type>blah blah</g:product_type>
<g:payment_accepted>Cash</g:payment_accepted>
<g:payment_accepted>Check</g:payment_accepted>
<g:payment_accepted>Visa</g:payment_accepted>
<g:payment_accepted>Mastercard</g:payment_accepted>
</item>
</channel>
</rss>