首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向现有RSS添加新的RSS元素,而不修改现有的名称空间前缀

向现有RSS添加新的RSS元素,而不修改现有的名称空间前缀
EN

Stack Overflow用户
提问于 2011-06-25 03:42:26
回答 1查看 890关注 0票数 0

我有一个输入RSS Feed与一些元素已经添加了名称空间前缀(对于itunes)。在不删除属性并再次添加C#的情况下,假设添加了一个元素<itunes:subtitle>作为名称空间,该元素为<subtitle>

所需输出:

代码语言:javascript
复制
 <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd/" version="2.0">
      <channel>
        <title>channelTitle</title>
        <itunes:subtitle>subtitle_description</itunes:subtitle>
        <item>
          <title>item1</title>
          <itunes:subtitle>A short description</itunes:subtitle>
        </item>
      </channel>
    </rss>

输入XML:

代码语言:javascript
复制
 <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd/" version="2.0">
      <channel>

        <item>
          <title>item1</title>
          <itunes:subtitle>A short description</itunes:subtitle>
        </item>
      </channel>
    </rss>

如何在C#中添加另一个元素,同时又保留现有的命名空间: element?我必须在代码中再次显式地添加名称空间(并且名称空间也应该出现在输入XML中,否则它将处理无效的XML:

请参见代码:

代码语言:javascript
复制
 XNamespace itunes = "http://www.itunes.com/dtds/podcast-1.0.dtd/";
     string rssFeed = "<rss xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" version=\"2.0\"><channel><item><title>item1</title><itunes:subtitle>A short description</itunes:subtitle></item></channel></rss>";

     XDocument XMLDoc = XDocument.Parse(rssFeed);

     XMLDoc.Root.RemoveAttributes();     
     XMLDoc.Root.Add(new XAttribute(XNamespace.Xmlns + "itunes", itunes.NamespaceName));

    //Without adding the namespace attribute explicitly, the xmlns attribute is added instead to <subtitle> instead of <itunes:subtitle> : 
      XMLDoc.Element("rss").Element("channel").AddFirst(
                    new XElement("title", "channelTitle"),
                    new XElement(itunes + "subtitle", "subtitle_description")
                );

正确添加。但是,现在在输入XML中更改了输出:

代码语言:javascript
复制
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd/">
  <channel>
    <title>channelTitle</title>
    <itunes:subtitle>subtitle_description</itunes:subtitle>
    <item>
      <title>item1</title>
      <subtitle xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd">A short description</subtitle>
    </item>
  </channel>
</rss>

Approach2:

代码语言:javascript
复制
  XNamespace itunes = "http://www.itunes.com/dtds/podcast-1.0.dtd/";
  string rssFeed = "<rss xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" version=\"2.0\"><channel><item><title>item1</title><itunes:subtitle>A short description</itunes:subtitle></item></channel></rss>";

           XDocument XMLDoc = XDocument.Parse(rssFeed);

            XMLDoc.Element("rss").Element("channel").AddFirst(
                new XElement("title", "channelTitle"),
                new XElement(itunes + "subtitle", "subtitle_description")
            );

            Console.WriteLine(XMLDoc);

输出:

代码语言:javascript
复制
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>channelTitle</title>
    <subtitle xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd/">subtitle_description</subtitle>
    <item>
      <title>item1</title>
      <itunes:subtitle>A short description</itunes:subtitle>
    </item>
  </channel>
</rss>

尽管我的问题很长,但我希望得到几行代码作为答案,我肯定遗漏了一些简单的东西:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-26 18:34:31

我不能重现你所说的你所面临的问题,下面这个简单的例子

代码语言:javascript
复制
    string rssFeed = "<rss xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\" version=\"2.0\"><channel><item><title>item1</title><itunes:subtitle>A short description</itunes:subtitle></item></channel></rss>";

    XDocument XMLDoc = XDocument.Parse(rssFeed);

    XNamespace itunes = XMLDoc.Root.GetNamespaceOfPrefix("itunes");

    XMLDoc.Element("rss").Element("channel").AddFirst(
                  new XElement("title", "channelTitle"),
                  new XElement(itunes + "subtitle", "subtitle_description")
              );

    XMLDoc.Save(Console.Out);
    Console.WriteLine();

使用.NET 3.5运行时,输出

代码语言:javascript
复制
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>channelTitle</title>
    <itunes:subtitle>subtitle_description</itunes:subtitle>
    <item>
      <title>item1</title>
      <itunes:subtitle>A short description</itunes:subtitle>
    </item>
  </channel>
</rss>

仔细观察您的代码,您会发现唯一的问题是一些示例使用URI http://www.itunes.com/dtds/podcast-1.0.dtd,而另一些示例的http://www.itunes.com/dtds/podcast-1.0.dtd/则以斜杠"/“结尾。所以这可能就是你遇到问题的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6472959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档