使用XmlDocument进行XML遍历

本文关键字:遍历 XML 进行 XmlDocument 使用 | 更新日期: 2023-09-27 18:10:05

我有下面的代码,我用它来遍历XML:

private void btn_readXML_Click(object sender, EventArgs e)
{
        var doc = new XmlDocument();
        doc.Load("e:''contacts.xml");
        // Load xml document.            
        TraverseNodes(doc.ChildNodes);     
}
static List<string> xmlnodes = new List<string>();
private static void TraverseNodes(XmlNodeList nodes)
{     
       foreach (XmlNode node in nodes)
       {                   
              List<string> temp = new List<string>();                  
              temp.Add("Node name: " + node.Name.ToString());
              XmlAttributeCollection xmlAttributes = node.Attributes;
              foreach (XmlAttribute at in xmlAttributes)
              {
                   temp.Add("  Atrib: " + at.Name + ": " + at.Value);
              }
               xmlnodes.AddRange(temp);
               TraverseNodes(node.ChildNodes);     
}

但我的问题是,我不想遍历整个文档,我只想遍历节点及其随后具有属性'X'的子节点。请注意,我不知道节点在哪里。基本上我要做的是,找出节点是否存在(它会有属性X)这就是我确定它是正确节点的方法,如果是,那么取出它的子节点。

谁能帮我一下吗?我对xml还是个新手。谢谢预支!

使用XmlDocument进行XML遍历

假设XML具有以下结构:

<Contacts>
   <Contact X="abc">
       <Child1></Child1>
   </Contact>
   <Contact X="def">
       <Child2></Child2>
   </Contact>
</Contacts>

使用XmlNode的示例代码。SelectNodes:

var doc = new XmlDocument();
doc.Load("e:''contacts.xml");
//get root element of document   
XmlElement root = doc.DocumentElement;
//select all contact element having attribute X
XmlNodeList nodeList = root.SelectNodes("//Contact[@X]");
//loop through the nodelist
foreach (XmlNode xNode in nodeList)
{       
    //traverse all childs of the node
}

关于不同的XPath查询请参阅此链接。

:

如果要选择文档中具有属性X的所有元素。不管它们在哪里。您可以使用以下命令:

//select all elements in the doucment having attribute X
XmlNodeList nodeList = root.SelectNodes("//*[@X]");

试试这个:

private void btn_readXML_Click(object sender, EventArgs e)
{
        var doc = new XmlDocument();
        doc.Load("e:''contacts.xml");
        var nodes = xdoc.SelectNodes("//yournodename");
        // ex. 
        // var nodes = xdoc.SelectNodes("//Company");
        TraverseNodes(nodes);   
}