1

私はその多くのコードを知っています...申し訳ありません....私のリストクラスはこのようなものです..

public class XMLList
{
    public string Title { get; set; }
    [DataMember]
    public string Link { get; set; }
    [DataMember]
    public DateTime pubDate { get; set; }
    [DataMember]
    public string dcCreator { get; set; }
    [DataMember]
    public string GUID { get; set; }
    [DataMember]
    public Int32 wpPostId { get; set; }
    [DataMember]
    public string wpStatus { get; set; }
    [DataMember]
    public Int32 wpMenuOrd { get; set; }
    [DataMember]
    public string Category { get; set; }
    [DataMember]
    public List<Comment> Comments { get; set; }
}

public class Comment
{
    [DataMember]
    public Int32 wpCmtId { get; set; }
    [DataMember]
    public string wpCmtAuthor { get; set; }
    [DataMember]
    public string wpCmtAuthorEmail { get; set; }
    [DataMember]
    public string wpCmtAuthorURL { get; set; }
    [DataMember]
    public Int64 wpCmtAuthorIP { get; set; }
    [DataMember]
    public DateTime wpCmtAuthorDate { get; set; }
}

私のC#コードはこのようなものです

XmlDocument doc = new XmlDocument();
doc.Load(@"xml\willowcreekassociationblog.wordpress.xml");
//Get Channel Node
XmlNode channelNode = doc.SelectSingleNode("rss/channel");
if (channelNode != null)
{
    //Add NameSpace
    XmlNamespaceManager nameSpace = new XmlNamespaceManager(doc.NameTable);
    nameSpace.AddNamespace("excerpt", "http://wordpress.org/export/1.2/excerpt/");
    nameSpace.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/");
    nameSpace.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
    nameSpace.AddNamespace("wfw", "http://wellformedweb.org/CommentAPI/");
    nameSpace.AddNamespace("wp", "http://wordpress.org/export/1.2/");

    //Parse each item
    foreach (XmlNode itemNode in channelNode.SelectNodes("item"))
    {
        objrssItem.Add(rssItem);
        rssItem.GUID = itemNode.SelectSingleNode("guid").InnerText;
        rssItem.Title = itemNode.SelectSingleNode("title").InnerText;
        rssItem.dcCreator = itemNode.SelectSingleNode("dc:creator", nameSpace).InnerText;
        rssItem.Link = itemNode.SelectSingleNode("link").InnerText;
        rssItem.pubDate = DateTime.Parse(itemNode.SelectSingleNode("pubDate").InnerText);
        rssItem.ContentEncoded = itemNode.SelectSingleNode("content:encoded", nameSpace).InnerText;

        XmlNode cNode = doc.SelectSingleNode("rss/channel/item");
        foreach (XmlNode commentNode in cNode.SelectNodes("wp:comment", nameSpace))
        {
           //rssItem.Comments = Comments
            rsscomment.wpCmtId = Convert.ToInt32(commentNode.SelectSingleNode("wp:comment_id", nameSpace).InnerText);
            rsscomment.wpCmtAuthor = commentNode.SelectSingleNode("wp:comment_author", nameSpace).InnerText;
            rsscomment.wpCmtContent = commentNode.SelectSingleNode("wp:comment_content", nameSpace).InnerText;  
        }
    }
    oXMLListResult.listOfXMLResult = objrssItem;
}

ここにリンクの説明を入力するようなxmlがあります

xmlnode を使用してチャネル内の各アイテムを読み込もうとしているときに、正常に動作しています。各項目には複数のコメントがあり、foreach 内で foreach を使用して達成しようとしています。しかし wp:comment foreach アイテムは機能しません。私は何を間違っていますか?私はいくつかのグーグルをしましたが、運がありませんでした。

ありがとう。

4

1 に答える 1

1
XmlNode cNode = doc.SelectSingleNode("rss/channel/item");

これにより、列挙が最初にリセットitemされ、すべてのアイテムに同じコメントが付けられます。

編集:
これが、私が言及した問題を解決する最も簡単な方法だと思います。すでに選択されているノードの下を検索することで、繰り返しを回避できます。cNode不要になったことに注意してください。

foreach (XmlNode commentNode in itemNode.SelectNodes("wp:comment", nameSpace))
于 2012-07-26T15:36:28.293 に答える