簡體   English   中英

從 XmlWriter.WriteStartElement 中排除命名空間的問題

[英]Problem with excluding namespace from XmlWriter.WriteStartElement

我有一個小問題,也許你可以幫助我。

我嘗試使用XmlWriter編寫一個看起來像這樣的 XML 標記( w3c 提要推薦):

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

問題是我不能像我想要的那樣使用WriteStartElement方法(原子作為前綴,鏈接作為元素名稱),因為這給了我一個“ ArgumentException: Cannot use a prefix with an empty namespace ”。

我的代碼如下所示:

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 的答案以獲得解決方案。

為什么不只使用適當的命名空間( http://www.w3.org/2005/Atom )?

您可以更早地編寫命名空間聲明,在這種情況下,您只需要使用元素名稱和命名空間的WriteStartElement重載 - 我認為前綴會自動使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM