XML文件如下:
<?xml version="1.0" encoding="gb2312"?>
<?xml:stylesheet type="text/xsl" href="test.xsl"?>
<provinces>
<province pn="河北省">
<cn>石家庄市</cn>
<cn>张家口市</cn>
</province>
<province pn="四川省">
<cn>德阳市</cn>
<cn>yyyyy市</cn>
<cn>zzzz市</cn>
</province>
<province pn="贵州省">
<cn>贵阳市</cn>
</province>
</provinces>--------------------------
            XmlTextReader xmlReader=null;
string sFilePath_XML=@"G:\Web\xml\province.xml"; try
{
xmlReader=new XmlTextReader(sFilePath_XML);
}
catch(XmlException ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
if(xmlReader!=null)
xmlReader.Close();
}
                            ......//以下的代码该如何写问题1:如果@"G:\Web\xml\province.xml";路径不对,好象提示不了错误信息
问题2:如何循环读取每一个省
问题3:如何循环读取每一个市
问题4:如何定位到某一个省循环读取下面的市
问题5:如果需求是以上的这些,是不是XmlTextReader是最好的选择,如果不是,还有什么类更好!
在这里请教老鸟,先谢谢了~

解决方案 »

  1.   

    >>>问题1:如果@"G:\Web\xml\province.xml";路径不对,好象提示不了错误信息the error will occur when you start to read the content
    try
    {
     xmlReader=new XmlTextReader(sFilePath_XML);
     while (xmlReader.Read())
     {
       //....
     }                              
    }
    catch(XmlException ex)
    {
     Console.WriteLine(ex.ToString());
    }
    >>>问题2:如何循环读取每一个省
    >>>问题3:如何循环读取每一个市try something like (didn't test, so there might be errors)try
    {
     xmlReader=new XmlTextReader(sFilePath_XML);
     while (xmlReader.Read())
     {
       if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.LocalName == "province")
       {
    Console.WriteLine(xmlReader.GetAttribute("pn"));
    ReadCity(xmlReader);
       }
     }                              
    }
    catch(XmlException ex)
    {
     Console.WriteLine(ex.ToString());
    }
    finally
    {
     if(xmlReader!=null)
       xmlReader.Close();
    }
    void ReadCity(XmlTextReader xmlReader)
    {
      while (xmlReader.Read())
      {
       if (xmlReader.NodeType != XmlNodeType.EndElement && xmlReader.LocalName == "province")
    return;    if (xmlReader.NodeType != XmlNodeType.Element && xmlReader.LocalName == "cn")
    Console.WriteLine(xmlReader.ReadString());
        
      }   
    }>>>>问题4:如何定位到某一个省循环读取下面的市you have to go through the loop like the above code, otherwise, you shouldn't be using XmlTextReader, use XmlDocument or XPathNavigator + Xpath
    >>>>问题5:如果需求是以上的这些,是不是XmlTextReader是最好的选择,如果不是,还有什么类更好!if your xml is small, then use XmlDocument, otherwise, use XPathNavigator
      

  2.   

    sorry, ReadCity should be something likevoid ReadCity(XmlTextReader xmlReader)
    {
      while (xmlReader.Read())
      {
       if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.LocalName == "province")
    return;    if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.LocalName == "cn")
    Console.WriteLine(xmlReader.ReadString());
        
      }   
    }
      

  3.   

    if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.LocalName == "province")
    {
    Console.WriteLine(xmlReader.GetAttribute("pn"));
    //ReadCity(xmlReader);
    string str=Console.ReadLine();
    }为什么这样,我只能读取第一个省份,感觉没有循环?!请教~
      

  4.   

    对于第5个问题
    你的意思是现在几乎用不到XmlTextReader,而如果是容量小的XML文件,一般都用XmlDocument
    而比较大的XML文件都用XPathNavigator而且XPathNavigator可以支持XPATH迅速定位?!不知道我的理解是不是正确呢