0

2つのRSSフィードをマージして1つにします。私は実際に2つのフィードをマージしてアイテムを正しい場所に配置することができましたが、各属性のデータ、つまりタイトルにはtitle + link + description + author + 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);
4

2 に答える 2

0

Konrad の答えは明確ですが、タイトル タグ内にネストされたタグがあるとうまくいかない可能性があります。

<title> TEXT <tag1> OTHER_TEXT </tag1></title> たとえば、私のコンピューターでは、TEXT と OTHER_TEXT の連結が返されます。

これはうまくいくはずです:

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

FirstChild は、タイトルに他のタグがあるかどうかに関係なく 、 TEXTを取得します。

于 2012-08-23T19:00:19.640 に答える
0

ご想像のとおり、問題は次のとおりです。

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

不思議じゃない

各属性のデータ、つまり title には title+link+description+author+pubDate が含まれ、link、description、author、pubdate について繰り返されます。

各ノードの特定のサブ要素の値を読み取る必要があります。おそらく次のようなものです:

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

参照については、 http://www.csharp-examples.net/xml-nodes-by-name/を参照してください。

于 2012-08-23T14:33:25.463 に答える