合并两个XMLDocuments rss

时间:2012-08-23 11:48:39

标签: c# xml xmlnode

我有两个rss feed我想合并在一起制作一个。我实际上设法将两个提要合并在一起,并将项目放在正确的位置 - 但每个属性中的数据,即标题包含标题+链接+描述+作者+ pubDate - 并重复链接,描述,作者和pubdate 。有人能帮帮我吗?

    Object rssData = new object();
    Cms.UI.CommonUI.ApplicationAPI AppAPI = new Cms.UI.CommonUI.ApplicationAPI();
    rssData = AppAPI.ecmRssSummary(50, true, "DateCreated", 0, "");

    Response.ContentType = "text/xml";
    Response.ContentEncoding = System.Text.Encoding.UTF8; 

    XmlDocument xmlDocument = new XmlDocument();

    xmlDocument.LoadXml(rssData.ToString());


    //************************************************************
    // Obtain 5 data items from second list

    Object rssData1 = new object();
    Cms.UI.CommonUI.ApplicationAPI AppAPI1 = new Cms.UI.CommonUI.ApplicationAPI();
    rssData1 = AppAPI1.ecmRssSummary(60, true, "DateCreated", 5, "");

    XmlDocument xmlDocument1 = new XmlDocument();

    xmlDocument1.LoadXml(rssData1.ToString());


    XmlNodeList nl = xmlDocument1.SelectNodes("/rss/channel");
    XmlNode root = nl[0]; //do I need this line?

    foreach (XmlNode xnode1 in root.ChildNodes)
    {
        string title = xnode1.InnerText;
        string link = xnode1.InnerText;
        string desc = xnode1.InnerText;
        string auth = xnode1.InnerText;
        string pdate = xnode1.InnerText;

        //Merge new nodes

        node = xmlDocument.CreateNode(XmlNodeType.Element, "item", null);
        //node.InnerText = "this is new node";

        //create title node
        XmlNode nodeTitle = xmlDocument.CreateElement("title");
        nodeTitle.InnerText = title;

        //create Link node
        XmlNode nodeLink = xmlDocument.CreateElement("link");
        nodeLink.InnerText = link;

        XmlNode nodeDesc = xmlDocument.CreateElement("description");
        nodeDesc.InnerText = desc;

        XmlNode nodeAuthor = xmlDocument.CreateElement("author");
        nodeAuthor.InnerText = auth;

        XmlNode nodepubDate = xmlDocument.CreateElement("pubDate");
        nodepubDate.InnerText = pdate;


        //add to parent node
        node.AppendChild(nodeTitle);
        node.AppendChild(nodeLink);
        node.AppendChild(nodeDesc);
        node.AppendChild(nodeAuthor);
        node.AppendChild(nodepubDate);

        //add to elements collection
        //xmlDocument.DocumentElement.AppendChild(node);
        xmlDocument.DocumentElement.SelectNodes("/rss/channel")[0].AppendChild(node);
    }

    //********************************************

    xmlDocument.Save(Response.Output);

2 个答案:

答案 0 :(得分:0)

正如你所怀疑的那样,问题在于:

string title = xnode1.InnerText;
string link = xnode1.InnerText;
string desc = xnode1.InnerText;
string auth = xnode1.InnerText;
string pdate = xnode1.InnerText;

难怪

  

每个属性中的数据,即标题包含   标题+链接+描述+作者+ pubDate - 重复链接,   描述,作者和pubdate。

您需要读取每个节点的特定子元素的值。可能类似于:

string title = xnode1["title"].InnerText;

请参阅http://www.csharp-examples.net/xml-nodes-by-name/以供参考。

答案 1 :(得分:0)

康拉德的答案很明确,但如果标题标签中有嵌套标签,它可能无效。

说,<title> TEXT <tag1> OTHER_TEXT </tag1></title> 在我的计算机上,它将返回TEXT和OTHER_TEXT的串联。

这应该有效:

string title = xnode1["title"].FirstChild.Value;

无论是否有其他标签带有标题,FirstChild都会为您提供 TEXT