没明白你要得到的结果是:{{book1,Title,s,Author},{book2},{book3,Title,Author,price}}还是:{{book1,Title,s,p,Author},{book2},{book3,Title,Author,firstname,lastnaem,price}}

解决方案 »

  1.   

    返回
    {{book1,s},{book2},{book3,Author}}
    即library下的节点全显示,但再下一层的节点如果还有子节点才返回,否则如Title这种只有值的就不返回
      

  2.   

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

  3.   

    不行啊,只返回了
    {book1},{book2},{book3}}
      

  4.   

    当参数为library时
    返回{{book1,s},{book2},{book3,Author}}当参数为book1时
    返回{{s}}
      

  5.   

    不可能,上面的代码我测试过我贴上来的:
    -------------------------------------
    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;
    }
      

  6.   

    但是当参数是book1时
    应该返回{{s}}但上面的程序返回的是{{Title,s,Author}}啊
      

  7.   

    每层都要判断是否含有子节点,如果这样的话,你输入library就不可能会返回book2,应该book2中有没有子节点!!!
      

  8.   

    对啊,如果book2没有值,就不返回
    输入library后
    返回{{book1,s},{book3,Author}}
      

  9.   

    所以我说一开始我没说清楚应该输入library时返回
    {{book1,s},{book3,Author}}
    输入book1
    返回{{s}}
      

  10.   

    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;