XML循环提取的问题

scy251147 2009-03-15 05:39:45
我的xml数据库是这样的

<?xml version="1.0" encoding="gb2312"?>
<Main>
<TypeName>
<Name id="1">c#语言基础</Name>
<Name id="2">c#高级技术</Name>
<Name id="3">asp.net学习</Name>
<Name id="4">javascript学习</Name>
<Name id="5">Div+Css学习</Name>
<Name id="6">单片机了解</Name>
<Name id="7">SQL技术摘抄</Name>
<Name id="8">心情随笔</Name>
</TypeName>
<ChapterList>

</ChapterList>
</Main>

我的提取的代码是这样的

public static string ReadNodeValue(string paths)
{
StringBuilder sb = new StringBuilder();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist = xmldoc.SelectNodes("//Main/TypeName") ;
foreach (XmlNode xnd in nodelist)
{
for (int i = 0; i < xnd.ChildNodes.Count; i++)
{
sb.Append(xnd.SelectSingleNode("Name").InnerText + "|");
}
}
return sb.ToString();
}

结果是利用messagebox测试的时候,是八个“c#语言基础|c#语言基础|c#语言基础|c#语言基础|c#语言基础|c#语言基础|c#语言基础|c#语言基础|”
怎样进行循环提取呢。还有就是万一我要在里面多增加几条

<Name id="9">网站建设</Name>
<Name id="10">单片机学习</Name>
<Name id="11">单片机程序</Name>

该怎么来做呢,顶者有分
...全文
212 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovebgh0923 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cppfaq 的回复:]
C# code public static string ReadNodeValue(string paths)
{
StringBuilder sb = new StringBuilder();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist = xmldoc.SelectNodes("//Main/TypeName");
foreach (XmlNode xnd in nodelist)
{
for (int i = 0; i < xnd.ChildNodes.Co…
[/Quote]

五楼的正解
pcjbird 2009-03-15
  • 打赏
  • 举报
回复
~~~~~~
我姓区不姓区 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 scy251147 的回复:]
引用 9 楼 ojlovecd 的回复:
try:
C# codepublicstaticstringReadNodeValue(stringpaths)
{
StringBuilder sb=newStringBuilder();
XmlDocument xmldoc=newXmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist=xmldoc.SelectNodes("//Main/TypeName") ;foreach(XmlNode xndinnodelist)
{foreach(XmlNode xninxnd.ChildNodes)
{
sb.Append(…

这个正解,呵呵,ojlovecd厉害,现在的问题是,如果我想里面添加记…
[/Quote]
参考11楼
scy251147 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ojlovecd 的回复:]
引用 10 楼 scy251147 的回复:
引用 8 楼 jijunwu 的回复:
for (int i = 0; i   < xnd.ChildNodes.Count; i++)
{}
去掉


不行,去掉了只能读出第一个,5楼的是正解,现在看看我六楼的要求

言则我三楼是不正确的?
[/Quote]
呵呵~~~~当然是对的,刚才忘记写上了,不好意思了哈
scy251147 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ojlovecd 的回复:]
try:
C# codepublicstaticstringReadNodeValue(stringpaths)
{
StringBuilder sb=newStringBuilder();
XmlDocument xmldoc=newXmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist=xmldoc.SelectNodes("//Main/TypeName") ;foreach(XmlNode xndinnodelist)
{foreach(XmlNode xninxnd.ChildNodes)
{
sb.Append(…
[/Quote]
这个正解,呵呵,ojlovecd厉害,现在的问题是,如果我想里面添加记录

<Name id="9">网站建设</Name>
<Name id="10">单片机学习</Name>
<Name id="11">单片机程序</Name>

该怎么办呢,
我姓区不姓区 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 scy251147 的回复:]
引用 8 楼 jijunwu 的回复:
for (int i = 0; i  < xnd.ChildNodes.Count; i++)
{}
去掉



不行,去掉了只能读出第一个,5楼的是正解,现在看看我六楼的要求
[/Quote]
言则我三楼是不正确的?
我姓区不姓区 2009-03-15
  • 打赏
  • 举报
回复
增加节点方法参考:

XmlNode xn = doc.CreateNode(XmlNodeType.Element, "", "Name", "");
xn.InnerText = "网站建设";
XmlAttribute xa = doc.CreateAttribute("id");
xa.Value = "9";
xn.Attributes.Append(xa);
node.AppendChild(xn);
scy251147 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jijunwu 的回复:]
for (int i = 0; i < xnd.ChildNodes.Count; i++)
{}
去掉

[/Quote]

不行,去掉了只能读出第一个,5楼的是正解,现在看看我六楼的要求
我姓区不姓区 2009-03-15
  • 打赏
  • 举报
回复
try:

public static string ReadNodeValue(string paths)
{
StringBuilder sb = new StringBuilder();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist = xmldoc.SelectNodes("//Main/TypeName") ;
foreach (XmlNode xnd in nodelist)
{
foreach (XmlNode xn in xnd.ChildNodes)
{
sb.Append(xn.InnerXml + "|" + xn.Attributes["id"].Value + "|");
}
}
return sb.ToString();
}

  • 打赏
  • 举报
回复
for (int i = 0; i < xnd.ChildNodes.Count; i++)
{}
去掉
scy251147 2009-03-15
  • 打赏
  • 举报
回复
三顶起
scy251147 2009-03-15
  • 打赏
  • 举报
回复
假设我现在想连同name的属性,也即id值,和name的值一块添加到stringbuilder中,该怎么写呢?
比如
c#语言基础|1|c#高级技术|2|asp.net学习|3|javascript学习|4|Div+Css学习|5|单片机了解|6|SQL技术摘抄|7|心情随笔|8|
分不够再加
cppfaq 2009-03-15
  • 打赏
  • 举报
回复
 public static string ReadNodeValue(string paths)
{
StringBuilder sb = new StringBuilder();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist = xmldoc.SelectNodes("//Main/TypeName");
foreach (XmlNode xnd in nodelist)
{
for (int i = 0; i < xnd.ChildNodes.Count; i++)
{

// sb.Append(xnd.SelectSingleNode("Name").InnerText + "|");
sb.Append(xnd.ChildNodes[i].InnerText + "|");

}
}
return sb.ToString();
}
maddemon 2009-03-15
  • 打赏
  • 举报
回复
xmldoc.SelectNodes("/Main/TypeName/Name") ;
我姓区不姓区 2009-03-15
  • 打赏
  • 举报
回复
try:

public static string ReadNodeValue(string paths)
{
StringBuilder sb = new StringBuilder();
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(paths);
XmlNodeList nodelist = xmldoc.SelectNodes("//Main/TypeName") ;
foreach (XmlNode xnd in nodelist)
{
foreach (XmlNode xn in xnd.ChildNodes)
{
sb.Append(xn.InnerXml + "|");
}
}
return sb.ToString();
}

scy251147 2009-03-15
  • 打赏
  • 举报
回复
再顶起
scy251147 2009-03-15
  • 打赏
  • 举报
回复
顶起

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧