C# 使用xmlnode读取重复xml
我喜欢XMLC# 使用xmlnode读取重复xml,c#,xmlnode,C#,Xmlnode,我喜欢XML <rss> <channel> <item> <category domain="category" nicename="change"><![CDATA[Changing Lives]]></category> <category domain="category" nicename="events"><![CDATA[Events]]><
<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>
我正在尝试阅读文本(改变生活、事件、领导力)。。。使用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>");
}
}
}
}
protectedvoid btnImportPost\u单击(对象发送方,事件参数e)
{
XmlDocument doc=新的XmlDocument();
字符串strPath=Server.MapPath(“~/App_Data/willowcreekassociationblog.wordpress.xml”);
单据加载(strPath);
//获取通道节点
XmlNode channelNode=doc.SelectSingleNode(“rss/频道”);
if(channelNode!=null)
{
日期时间温度;
//添加名称空间
XmlNamespaceManager nameSpace=新的XmlNamespaceManager(doc.NameTable);
AddNamespace(“摘录”http://wordpress.org/export/1.2/excerpt/");
AddNamespace(“内容”http://purl.org/rss/1.0/modules/content/");
AddNamespace(“dc”http://purl.org/dc/elements/1.1/");
nameSpace.AddNamespace(“wfw”http://wellformedweb.org/CommentAPI/");
AddNamespace(“wp”,”http://wordpress.org/export/1.2/");
//分析每个项目
foreach(channelNode.SelectNodes(“项”)中的XmlNode itemNode)
{
//这里有一些代码
foreach(itemNode.SelectNodes(“类别”)中的XmlNode categoryNode)
{
//CMS.SiteProvider.CategoryInfo GetCate=null;
string CategoryName=itemNode.SelectSingleNode(“类别”).InnerText;
响应。写入(@“警报('根文档:“+CategoryName+”);”);
}
}
}
}
只需使用
string CategoryName = categoryNode.InnerText;
原因是,您并不是每次在循环中都写出itemNode的InnerText,而是使用SelectSingleNode仅提取第一个匹配项 尝试将内部循环更改为:
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);
}
您必须使用
XmlDocument
?使用LINQ到XML将使所有这些变得简单…但这是现有的代码..如果更改为xmldocument..我需要更改大量代码。。。所以我不想这样做。我们可以使用cmlnode实现这个目标吗?我确信这是可行的,但我现在没有时间回到可怕的.NET 2 XML API。任何使用LINQtoXML进行重构的努力都可能很快得到回报。。。