I have an app.config file, and need to get value of an attribute:
开发者_StackOverflow<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?
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.
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);
It like ....
var result = XDocument.Load("test.xml").Descendants("param");
foreach (var p in result)
{
Console.WriteLine(p.Attribute("name"));
}
Console.Read();
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)
精彩评论