【问题标题】:Problem with excluding namespace from XmlWriter.WriteStartElement从 XmlWriter.WriteStartElement 中排除命名空间的问题
【发布时间】:2009-03-17 15:54:00
【问题描述】:

我有一个小问题,也许你可以帮我解决。

我尝试使用XmlWriter 编写一个如下所示的 XML 标记 (w3c feed recommendation):

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

问题是我不能像我想要的那样使用WriteStartElement-方法(原子作为前缀,链接作为元素名称),因为这给了我一个“ArgumentException: Cannot use a前缀为空的命名空间"。

我的代码如下所示:

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 的答案以获取解决方案。

【问题讨论】:

    标签: c# .net xml syndication


    【解决方案1】:

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

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

    【讨论】:

    • 已包含适当的命名空间。我从你的建议中得到的结果是 localhost:56011/Home/Feed" rel="self" type="application/rss+xml" xmlns="atom" /> 我已经用我得到的结果更新了上面的例子.还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2011-02-05
    • 2015-02-05
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多