gss3
gss3

Reputation: 117

Get attribute value from c#/xpath

I have an app.config file, and need to get value of an attribute:

<param name="File" value="C:\"/>

Liquid XML Studio gives the following xml:

/configuration/log4net/appender/param[1]

However, what C# code can use xpath to get a value?

Upvotes: 12

Views: 46641

Answers (4)

Lucero
Lucero

Reputation: 60190

Use this XPath:

/configuration/log4net/appender/param[@name='File']/@value

Depending on how you read the XML, the code for using the XPath may differ a bit. If you're using XDocument, you can use the XPathEvaluate extension method like so:

var eval = xml.XPathEvaluate("/configuration/log4net/appender/param[@name='File']/@value");
var value = ((IEnumerable)eval).OfType<XAttribute>().Single().Value;

If you're using XmlDocument, there is a SelectSingleNode() method. And if you use an XPathDocument, you need to compile a XPathExpression and then use this XPath against a navigator.

Upvotes: 27

Kirill Polishchuk
Kirill Polishchuk

Reputation: 56162

You can use XmlDocument. See XmlNode.SelectSingleNode and others.

Example:

XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<configuration>
<log4net>
<appender>
<param name=""File"" value=""C:\""/>
</appender>
</log4net>
</configuration>");

var node = doc.DocumentElement.SelectSingleNode("//param[@name = 'File']/@value");

Console.WriteLine(node.Value);

Upvotes: 9

shenhengbin
shenhengbin

Reputation: 4294

It like ....

        var result = XDocument.Load("test.xml").Descendants("param");

        foreach (var p in result)
        {
            Console.WriteLine(p.Attribute("name"));
        }

        Console.Read();

Upvotes: 1

Ondra
Ondra

Reputation: 1647

You can use XmlDocument and a method SelectSingleNode - http://msdn.microsoft.com/en-us/library/fb63z0tw.aspx
It will find a node matching your XPath.

I would do this with LINQ to XML (not with XPath)

Upvotes: 0

Related Questions