简体   繁体   English

使用xmlnode读取重复的xml

[英]reading repeat xml using xmlnode

I Have XML like 我有像XML

<rss>
<channel>
    <item>
        <category domain="category" nicename="change"><![CDATA[Changing Lives]]></category>
        <category domain="category" nicename="events"><![CDATA[Events]]></category>
        <category domain="category" nicename="leadership"><![CDATA[Leadership]]></category>
        <category domain="category" nicename="spiritual-transformation"><![CDATA[Spiritual Transformation]]></category>
    </item>
    <item></item>
    <item></item>
</channel>
</rss>

I am trying to read category innertext(changing lives, Events, Leadership) ... using foreach condition.. but for every loop I am getting Changing Lives only.. here is my code 我正在尝试使用foreach条件阅读类别内文(改变生活,事件,领导力)...。但是对于每个循环,我只会得到改变生活..这是我的代码

    protected void btnImportPost_Click(object sender, EventArgs e)
{

    XmlDocument doc = new XmlDocument();
    string strPath = Server.MapPath("~/App_Data/willowcreekassociationblog.wordpress.xml");
    doc.Load(strPath);
    //Get Channel Node
    XmlNode channelNode = doc.SelectSingleNode("rss/channel");
    if (channelNode != null)
    {
        DateTime temp;
        //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"))
        {
            //some code here

            foreach (XmlNode categoryNode in itemNode.SelectNodes("category"))
            {
                //CMS.SiteProvider.CategoryInfo GetCate = null;
                string CategoryName = itemNode.SelectSingleNode("category").InnerText;
                Response.Write(@"<script language='javascript'>alert('root Document:" + CategoryName + "');</script>");

            }

        }
    }
}

只需使用

string CategoryName = categoryNode.InnerText;

The reason is that you are not writing out the InnerText of itemNode each time round the loop, instead, you are using SelectSingleNode to pull out the first match only. 原因是您没有在每次循环时都写出itemNode的InnerText,而是使用SelectSingleNode仅拉出第一个匹配项。

Try changing your inner loop to: 尝试将内部循环更改为:

foreach (XmlNode categoryNode in itemNode.SelectNodes("category"))
{
   //CMS.SiteProvider.CategoryInfo GetCate = null;

   //string CategoryName = itemNode.SelectSingleNode("category").InnerText; // incorrect
   string CategoryName = categoryNode.InnerText;
   Console.Write(CategoryName);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM