XmlReader相比Dom速度要快很多,但是我发现网上的例子都是从头到尾遍历所有节点才行。请问:能否用XmlReader获取指定父节点的子节点?Xml示例如下:
<IOGROUP name="ACI1" desc="">
    <TAG id="1" MU="65531" MD="0" />
    <TAG id="2" MU="65532" MD="0" />
    <TAG id="3" MU="65533" MD="0" />
    <TAG id="4" MU="65534" MD="0" />
</IOGROUP><IOGROUP name="ACI2" desc="">
    <TAG id="5" MU="65535" MD="0" />
    <TAG id="6" MU="65536" MD="0" />
    <TAG id="7" MU="65537" MD="0" />
    <TAG id="8" MU="65538" MD="0" />
</IOGROUP>我想获取第二个IOGROUP节点(name属性为ACI2)下的子节点,我的XML是一个15M的大XML文件。

解决方案 »

  1.   

     XmlReader rdr = XmlReader.Create("txt.xml");
                while (rdr.Read())
                {
    if (rdr.NodeType == XmlNodeType.Element && rdr.Name != "root")//root为节点
                    {
                                        }
    }
      

  2.   

    我的每一个节点的Name都是IOGROUP,如果能用的话,你的rdr.Name应该改成rdr.GetAttribute("name").
    不过,得出了这个rdr之后,怎样获得rdr的子节点呢?
      

  3.   

    XmlReader reader = null;
      XmlDocument document = new XmlDocument();
      reader = XmlReader.Create(xmlfilepath+xmlfilename);
      document.Load(reader);
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
      string xpath = "descendant::"+elementname;
      XmlNodeList nodelist = document.SelectSingleNode(xpath, nsmgr).ChildNodes;
      foreach (XmlNode xmlnode in nodelist)
      {
      if (((XmlElement)xmlnode).HasAttributes)
      {
      //xmlnode.Attributes[0].Value, xmlnode.InnerText;
      }
      }
      

  4.   

    这种方法以前试过啦,但是经过测试,发现效率很低,和DOM是一样的,相当于直接用XmlDocument读取XML文件。不过还是谢谢您啦,呵呵
      

  5.   

    看来只能用这句话解释了:“鱼和熊掌不可兼得”
    XmlReader的速度很快,但是无法实现父子节点的关系。
    Dom虽慢,但是结构清晰。