【问题标题】:list inside list列表内列表
【发布时间】:2012-07-26 15:33:07
【问题描述】:

我知道它有很多代码...抱歉...我的列表类是这样的..

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;
}

我有像enter link description here这样的xml

当我尝试使用 xmlnode 读取通道中的每个项目时,它工作正常。每个项目都有多个 cmet,它们试图通过在 foreach 中使用 foreach 来实现。但是 wp:comment foreach 项目它不起作用。我究竟做错了什么?我做了一些谷歌,但没有运气。

谢谢。

【问题讨论】:

  • 这个问题让我想起了那些连锁电子邮件笑话,你必须向下滚动几页才能看到妙语。你能去掉一些空格吗?
  • 那个空白是图片文件。
  • 那么也许你应该裁剪图像文件:P
  • 或者更好...发布实际的 XML 文本而不是它的屏幕截图...

标签: c# xmldocument xmlnode


【解决方案1】:
XmlNode cNode = doc.SelectSingleNode("rss/channel/item");

这会将您的 item 枚举重置为开头,这将导致每个项目都具有相同的 cmets。

编辑:
我相信这是解决我提到的问题的最简单方法。通过在已选择的节点下方进行搜索,您可以避免重复。请注意,不再需要 cNode

foreach (XmlNode commentNode in itemNode.SelectNodes("wp:comment", nameSpace))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多