代码之家  ›  专栏  ›  技术社区  ›  Patrik Svensson Martin Ender

从XmlWriter.WriteStartElement中排除命名空间时出现问题

  •  2
  • Patrik Svensson Martin Ender  · 技术社区  · 15 年前

    我有一个小问题,也许你能帮我。

    我试着用 XmlWriter 要编写这样的XML标记( w3c feed recommendation ):

    <atom:link href="http://localhost" rel="self" type="application/rss+xml" />
    

    问题是我不能用 WriteStartElement -方法,因为它给了我一个 ArgumentException:不能使用命名空间为空的前缀 “。

    我的代码如下:

    public void WriteTo(XmlWriter writer, Feed feed)
    {
        // RSS element
        writer.WriteStartElement("rss", "");
        writer.WriteAttributeString("version", "2.0");
        writer.WriteAttributeString("xmlns", "atom", string.Empty, "http://www.w3.org/2005/Atom");
    
        // Channel element
        writer.WriteStartElement("channel");
    
        // The link to the feed.
        writer.WriteStartElement("link", "atom");
        writer.WriteAttributeString("href", feed.FeedUrl.ToString());
        writer.WriteAttributeString("rel", "self");
        writer.WriteAttributeString("type", "application/rss+xml");
        writer.WriteEndElement();
    
        // Feed information
        writer.WriteElementString("title", feed.Title);
        writer.WriteElementString("description", feed.Description);
        writer.WriteElementString("link", feed.Link.ToString());
    
        // Iterate through all items.
        foreach (FeedItem item in feed.Items)
        {
            writer.WriteStartElement("item");
            writer.WriteElementString("title", item.Title);
            writer.WriteElementString("link", item.Link.ToString());
            writer.WriteElementString("description", item.Description);
            writer.WriteElementString("guid", item.Guid);
            writer.WriteEndElement();
        }
    
        // Channel element end
        writer.WriteEndElement();
    
        // RSS element end
        writer.WriteEndElement();
    }
    

    我认为我的问题是微不足道的,很容易解决,但如何解决呢?

    更新:

    问题解决了。检查jon skeets答案以获得解决方案。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Jon Skeet    15 年前

    为什么不使用适当的名称空间( http://www.w3.org/2005/Atom )?

    您可以在前面编写名称空间声明,在这种情况下,您只需要 WriteStartElement 使用元素名称和命名空间-i的重载 认为 然后自动使用前缀。