帮忙小改一下程序~~~~~~~~~~~~ 没明白你要得到的结果是:{{book1,Title,s,Author},{book2},{book3,Title,Author,price}}还是:{{book1,Title,s,p,Author},{book2},{book3,Title,Author,firstname,lastnaem,price}} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 返回{{book1,s},{book2},{book3,Author}}即library下的节点全显示,但再下一层的节点如果还有子节点才返回,否则如Title这种只有值的就不返回 public string[][] readnodename(string FileName,string NodeName){ XmlDocument xmldoc=new XmlDocument(); xmldoc.Load(FileName); //读文件 string sXPath="//"+NodeName+"/*"; //设定路径 XmlNodeList nodes=xmldoc.DocumentElement.SelectNodes(sXPath); string[][] sRet=new string[nodes.Count][]; for(int i=0;i<nodes.Count;i++)//遍历节点 { int iAll=1; for(int j=0;j<nodes[i].ChildNodes.Count;j++) { if(nodes[i].ChildNodes[j].HasChildNodes && nodes[i].ChildNodes[j].ChildNodes[0].NodeType!=XmlNodeType.Text) iAll++; } sRet[i]=new string[iAll]; sRet[i][0]=nodes[i].Name+";"; int index=1; for(int k=0;k<nodes[i].ChildNodes.Count;k++) { if(nodes[i].ChildNodes[k].HasChildNodes && nodes[i].ChildNodes[k].ChildNodes[0].NodeType!=XmlNodeType.Text) { sRet[i][index]=nodes[i].ChildNodes[k].Name+";"; index++; } } } return sRet;} 不行啊,只返回了{book1},{book2},{book3}} 当参数为library时返回{{book1,s},{book2},{book3,Author}}当参数为book1时返回{{s}} 不可能,上面的代码我测试过我贴上来的:-------------------------------------private void button1_Click(object sender, System.EventArgs e){string[][] s=readnodename(@"e:\1.xml","library");for(int i=0;i<s.Length;i++){ for(int j=0;j<s[i].Length;j++) { Console.WriteLine(s[i][j]); }}}public string[][] readnodename(string FileName,string NodeName){ XmlDocument xmldoc=new XmlDocument(); xmldoc.Load(FileName); //读文件 string sXPath="//"+NodeName+"/*"; //设定路径 XmlNodeList nodes=xmldoc.DocumentElement.SelectNodes(sXPath); string[][] sRet=new string[nodes.Count][]; for(int i=0;i<nodes.Count;i++)//遍历节点 { int iAll=1; for(int j=0;j<nodes[i].ChildNodes.Count;j++) { if(nodes[i].ChildNodes[j].HasChildNodes && nodes[i].ChildNodes[j].ChildNodes[0].NodeType!=XmlNodeType.Text) iAll++; } sRet[i]=new string[iAll]; sRet[i][0]=nodes[i].Name+";"; int index=1; for(int k=0;k<nodes[i].ChildNodes.Count;k++) { if(nodes[i].ChildNodes[k].HasChildNodes && nodes[i].ChildNodes[k].ChildNodes[0].NodeType!=XmlNodeType.Text) { sRet[i][index]=nodes[i].ChildNodes[k].Name+";"; index++; } } } return sRet;} 但是当参数是book1时应该返回{{s}}但上面的程序返回的是{{Title,s,Author}}啊 每层都要判断是否含有子节点,如果这样的话,你输入library就不可能会返回book2,应该book2中有没有子节点!!! 对啊,如果book2没有值,就不返回输入library后返回{{book1,s},{book3,Author}} 所以我说一开始我没说清楚应该输入library时返回{{book1,s},{book3,Author}}输入book1返回{{s}} XmlDocument xmldoc=new XmlDocument();xmldoc.Load(FileName); //读文件 string sXPath="//"+NodeName+"/*"; //设定路径XmlNodeList nodes=xmldoc.DocumentElement.SelectNodes(sXPath); int iCount=0;for(int i=0;i<nodes.Count;i++){ if(nodes[i].HasChildNodes && nodes[i].ChildNodes[0].NodeType!=XmlNodeType.Text) iCount++;} string[][] sRet=new string[iCount][];int iCountIndex=0; for(int i=0;i<nodes.Count;i++)//遍历节点{ if(nodes[i].HasChildNodes && nodes[i].ChildNodes[0].NodeType!=XmlNodeType.Text) { int iAll=1; for(int j=0;j<nodes[i].ChildNodes.Count;j++) { if(nodes[i].ChildNodes[j].HasChildNodes && nodes[i].ChildNodes[j].ChildNodes[0].NodeType!=XmlNodeType.Text) iAll++; } sRet[iCountIndex]=new string[iAll]; sRet[iCountIndex][0]=nodes[i].Name+";"; int index=1; for(int k=0;k<nodes[i].ChildNodes.Count;k++) { if(nodes[i].ChildNodes[k].HasChildNodes && nodes[i].ChildNodes[k].ChildNodes[0].NodeType!=XmlNodeType.Text) { sRet[iCountIndex][index]=nodes[i].ChildNodes[k].Name+";"; index++; } } iCountIndex++; }}return sRet; C#Excel导出问题 jquery.easyui 实现 P标签中A 悬浮 更改背景 菜鸟一枚 求 高手哦! c# 父线程之间顺序执行,子线程之间并发执行 函数式编程 指的是什么? 将一个vb.net程序转换为C#程序后,主窗体无法显示,出现“设计器无法处理第 1018 行的代码:......”错误,谁有办法解决?请看错误行和完整代码段: 即时通讯以Web结合技术的方案 一个关于C#多控件的问题!!请高手指教 关于dns的编程?(如果分不够,可以再加) 窗体(WebForm)复制问题? C#实现填写网页表单并提交 模态窗体? 用ADO.NET操作Excel時數字的問題
{{book1,s},{book2},{book3,Author}}
即library下的节点全显示,但再下一层的节点如果还有子节点才返回,否则如Title这种只有值的就不返回
{
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(FileName); //读文件
string sXPath="//"+NodeName+"/*"; //设定路径
XmlNodeList nodes=xmldoc.DocumentElement.SelectNodes(sXPath); string[][] sRet=new string[nodes.Count][]; for(int i=0;i<nodes.Count;i++)//遍历节点
{
int iAll=1;
for(int j=0;j<nodes[i].ChildNodes.Count;j++)
{
if(nodes[i].ChildNodes[j].HasChildNodes && nodes[i].ChildNodes[j].ChildNodes[0].NodeType!=XmlNodeType.Text)
iAll++;
} sRet[i]=new string[iAll];
sRet[i][0]=nodes[i].Name+";"; int index=1;
for(int k=0;k<nodes[i].ChildNodes.Count;k++)
{
if(nodes[i].ChildNodes[k].HasChildNodes && nodes[i].ChildNodes[k].ChildNodes[0].NodeType!=XmlNodeType.Text)
{
sRet[i][index]=nodes[i].ChildNodes[k].Name+";";
index++;
}
}
} return sRet;
}
{book1},{book2},{book3}}
返回{{book1,s},{book2},{book3,Author}}当参数为book1时
返回{{s}}
-------------------------------------
private void button1_Click(object sender, System.EventArgs e)
{
string[][] s=readnodename(@"e:\1.xml","library");for(int i=0;i<s.Length;i++)
{
for(int j=0;j<s[i].Length;j++)
{
Console.WriteLine(s[i][j]);
}
}
}public string[][] readnodename(string FileName,string NodeName)
{
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(FileName); //读文件
string sXPath="//"+NodeName+"/*"; //设定路径
XmlNodeList nodes=xmldoc.DocumentElement.SelectNodes(sXPath); string[][] sRet=new string[nodes.Count][]; for(int i=0;i<nodes.Count;i++)//遍历节点
{
int iAll=1;
for(int j=0;j<nodes[i].ChildNodes.Count;j++)
{
if(nodes[i].ChildNodes[j].HasChildNodes && nodes[i].ChildNodes[j].ChildNodes[0].NodeType!=XmlNodeType.Text)
iAll++;
} sRet[i]=new string[iAll];
sRet[i][0]=nodes[i].Name+";"; int index=1;
for(int k=0;k<nodes[i].ChildNodes.Count;k++)
{
if(nodes[i].ChildNodes[k].HasChildNodes && nodes[i].ChildNodes[k].ChildNodes[0].NodeType!=XmlNodeType.Text)
{
sRet[i][index]=nodes[i].ChildNodes[k].Name+";";
index++;
}
}
} return sRet;
}
应该返回{{s}}但上面的程序返回的是{{Title,s,Author}}啊
输入library后
返回{{book1,s},{book3,Author}}
{{book1,s},{book3,Author}}
输入book1
返回{{s}}
xmldoc.Load(FileName); //读文件
string sXPath="//"+NodeName+"/*"; //设定路径
XmlNodeList nodes=xmldoc.DocumentElement.SelectNodes(sXPath);
int iCount=0;
for(int i=0;i<nodes.Count;i++)
{
if(nodes[i].HasChildNodes && nodes[i].ChildNodes[0].NodeType!=XmlNodeType.Text)
iCount++;
}
string[][] sRet=new string[iCount][];int iCountIndex=0;
for(int i=0;i<nodes.Count;i++)//遍历节点
{
if(nodes[i].HasChildNodes && nodes[i].ChildNodes[0].NodeType!=XmlNodeType.Text)
{
int iAll=1;
for(int j=0;j<nodes[i].ChildNodes.Count;j++)
{
if(nodes[i].ChildNodes[j].HasChildNodes && nodes[i].ChildNodes[j].ChildNodes[0].NodeType!=XmlNodeType.Text)
iAll++;
} sRet[iCountIndex]=new string[iAll];
sRet[iCountIndex][0]=nodes[i].Name+";"; int index=1;
for(int k=0;k<nodes[i].ChildNodes.Count;k++)
{
if(nodes[i].ChildNodes[k].HasChildNodes && nodes[i].ChildNodes[k].ChildNodes[0].NodeType!=XmlNodeType.Text)
{
sRet[iCountIndex][index]=nodes[i].ChildNodes[k].Name+";";
index++;
}
} iCountIndex++;
}
}return sRet;