简体   繁体   English

在.Net(C#)中构建Google商品Feed?

[英]Building a Google Product Feed in .Net (C#)?

Below is the schema I am trying to conform to: 下面是我试图遵循的架构:

  <?xml version="1.0"?>
  <rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
     <title>The name of your data feed</title>
     <link>http://www.example.com</link>
     <description>A description of your content</description>
     <item>
       <title>Red wool sweater</title>
       <link> http://www.example.com/item1-info-page.html</link>
       <description>Comfortable and soft ...    cold winter nights.</description>
       <g:image_link>http://www.example.com/image1.jpg</g:image_link>
       <g:price>25</g:price>
       <g:condition>new</g:condition>
       <g:id>1a</g:id>
     </item>
  </channel>
  </rss>

Below is what I have been able to produce: 以下是我能够制作的:

<?xml version="1.0"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>The name of your data feed</title>
    <link>http://www.google.com</link>
    <description>A description of your content</description>
    <item>
      <title>Red Wool Sweater</title>
      <link>http://www.google.com/Red-Wool-Sweater</link>
      <description>Comfortable and soft, this sweater will keep you warm on those cold winter nights.</description>
      <g:image_link>http://www.example.com/image1.jpg</g:image_link>
      <g:price>25</g:price>
      <g:condition>new</g:condition>
      <g:id>1a</g:id>
    </item>
  </channel>
</rss version="2.0">

Below is the code that I wrote to achieve this (the above): 下面是我为实现这个目的而写的代码(上面):

    // create and instantiate the writer object.
    XmlTextWriter xw = new XmlTextWriter("Products.xml", null);

    // use indenting.
    xw.Formatting = Formatting.Indented;

    // write the start of the document.
    xw.WriteStartDocument();

    xw.WriteStartElement("rss version=\"2.0\"");

    xw.WriteAttributeString("xmlns", "g", null, "http://base.google.com/ns/1.0");

    xw.WriteStartElement("channel");

    xw.WriteElementString("title", "The name of your data feed");
    xw.WriteElementString("link", "http://www.google.com");
    xw.WriteElementString("description", "A description of your content");

    xw.WriteStartElement("item");

    xw.WriteElementString("title", "Red Wool Sweater");
    xw.WriteElementString("link", "http://www.google.com/Red-Wool-Sweater");
    xw.WriteElementString("description", "Comfortable and soft, this sweater will keep you warm on those cold winter nights.");
    xw.WriteElementString("g:image_link", "http://www.example.com/image1.jpg");
    xw.WriteElementString("g:price", "25");
    xw.WriteElementString("g:condition", "new");
    xw.WriteElementString("g:id", "1a");

    // write the end element.
    xw.WriteEndElement();
    xw.WriteEndElement();
    xw.WriteEndElement();
    // write the end of the document.
    xw.WriteEndDocument();

    // close the writer.
    xw.Close();
    // press enter to exit.
    Console.ReadKey();

Those with eager eyes, will have spotted the problem I am having conforming to the google product feed schema ... "the closing rss tag element" ... is wrong. 那些热切的眼睛,会发现我符合谷歌产品饲料架构的问题......“关闭rss标签元素”......是错误的。 I have managed to replicate alot of it so far but that closing tag eludes. 到目前为止,我已经设法复制了很多,但结束标签却没有。 Can you guys help? 你们能帮忙吗?

Also, feel to free to change my code if I have done anything wrong or gone about doing it the wrong way? 另外,如果我做错了什么或者以错误的方式做错,我可以随意更改我的代码吗? Cheers. 干杯。

The problem is that you're trying to create an element with a name of rss version="2.0" . 问题是您正在尝试创建名称rss version="2.0"的元素。 Instead, you should be creating an element with a name of rss , and setting the version attribute to have a value of 2.0 : 相反,您应该创建一个名为rss的元素,并将version属性设置为值为2.0

xw.WriteStartElement("rss");
xw.WriteAttributeString("version", "2.0");

Personally I'd use LINQ to XML instead of XmlWriter to start with, mind you - it's a much nicer API. 我个人会使用LINQ to XML而不是XmlWriter ,请注意 - 它是一个更好的API。

What if, instead of doing this: 如果,而不是这样做,该怎么办:

xw.WriteStartElement("rss version=\"2.0\"");
xw.WriteAttributeString("xmlns", "g", null, "http://base.google.com/ns/1.0");

You did something like this: 你做了这样的事情:

xw.WriteStartElement("rss");
xw.WriteAttributeString("version", "2.0");
xw.WriteAttributeString("xmlns", "g", null, "http://base.google.com/ns/1.0");

I've never used XmlTextWriter before, but I'd think you should be able to add the version attribute after creating the rss tag, based on your code example. 我以前从未使用过XmlTextWriter,但我认为你应该能够在创建rss标签后添加版本属性,具体取决于你的代码示例。 (Might wanna double-check my syntax) (可能要仔细检查我的语法)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM