select elements with the name attribute name in special xml structure

21.4k views Asked by At

below is the structure of my xml document. I just want to first take the value of every node <attribute name="a"> then make a comparison of it with a given value. However I don't how to locate <attribute name="a"> of each node using xml selectnodes in c#. Google searches don't show any working solutions.

<nodes>     
 <node name = "node1">      
  <attribute name="a">This is node1 a</attribute>
  <attribute name="b">This is node1 b</attribute>
 </node>
 <node name = "node2">      
  <attribute name="a">This is node2 a</attribute>
  <attribute name="b">This is node2 b</attribute>
 </node>
 ...
</nodes>     
4

There are 4 answers

0
Frédéric Hamidi On BEST ANSWER

Assuming the XML markup in your question represents your whole document, you can do:

XmlNodeList attrElements
    = yourDocument.SelectNodes("/nodes/node/attribute[@name='a']");
2
BrokenGlass On

Use Linq to XML:

XElement xml = XElement.Load("test.xml");
var myNodes = xml.Descendants("attribute")
                 .Where(x => x.Attribute("name").Value == "a");

To retrieve the values instead of the nodes:

var myValues = xml.Descendants("attribute")
                  .Where(x => x.Attribute("name").Value == "a")
                  .Select(x => x.Value);
0
Digbyswift On

You could use Linq to XML, something like the following:

string xml = "<nodes>...";

var results = from node in XDocument.Parse(xml).Descendants()
          where node.Name == "attribute"
          select node.Value;

You could then loop through the results as required.

There is a nice Linq to XML overview here too.

0
Sam I am says Reinstate Monica On

I like to use the System.Xml.XmlDocument class for my xml parsing.

XmlDocument doc = new XmlDocument();
doc.load("myfilename.xml");
XmlNode node = doc.SelectSingleNode("\\attribute[name='a']")

You should have a look at some XPath reference to be sure that you're getting the xpath string right http://msdn.microsoft.com/en-us/library/ms256086.aspx