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文件。
<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文件。
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element && rdr.Name != "root")//root为节点
{
}
}
不过,得出了这个rdr之后,怎样获得rdr的子节点呢?
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;
}
}
XmlReader的速度很快,但是无法实现父子节点的关系。
Dom虽慢,但是结构清晰。