从C# / XPath获取属性值

12

我有一个app.config文件,需要获取属性的值:

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

Liquid XML Studio生成了以下xml:
/configuration/log4net/appender/param[1]

然而,C#代码如何使用xpath获取值?
4个回答

25

使用此XPath:

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

根据你读取XML的方式,使用XPath的代码可能会有所不同。如果你正在使用XDocument,你可以像这样使用XPathEvaluate扩展方法:

var eval = xml.XPathEvaluate("/configuration/log4net/appender/param[@name='File']/@value");
var value = ((IEnumerable)eval).OfType<XAttribute>().Single().Value;
如果您正在使用 XmlDocument,则可以使用 SelectSingleNode() 方法。如果您使用的是 XPathDocument,则需要编译一个 XPathExpression,然后根据该 XPath 对导航器进行操作。

当我尝试使用XPathSelectElement来获取属性时,会出现异常,但自2011年回答此问题以来可能已经发生了改变。我相信现在您需要调用XPathEvaluate(),像这样:https://dev59.com/ZVkS5IYBdhLWcg3w253q - Benj
1
@Benj 谢谢指出这个问题。我已经更新了答案以确保正确。 - Lucero

8
您可以使用 XmlDocument。请参阅 XmlNode.SelectSingleNode 等相关内容。
示例:
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);

1

它就像......

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

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

        Console.Read();

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接