c# - 从 XPath 中检索与同一节点中的另一个属性值相匹配的属性值

标签 c# xml xpath .net-3.5 xmldocument

我正在尝试读取一个属性的值,检查另一个属性的值。下面是我的xml内容。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="default" xsi:type="File" layout="${longdate}${message}${exception:format=tostring}" fileName="${basedir}/logs/Test24x7.txt" archiveAboveSize="999000" maxArchiveFiles="100" archiveEvery="Day"/>
    <target name="f7" xsi:type="File" layout="${longdate}${message}${exception:format=tostring}" fileName="${basedir}/logs/Errors/error.txt" archiveAboveSize="300000" maxArchiveFiles="100" archiveEvery="Day"/>
  </targets>
  <rules>
    <!-- <logger name="*" minLevel="Debug" appendTo="f0"/>  -->
    <logger name="*" minLevel="Info" appendTo="default"/>
    <logger name="*" minLevel="Error" appendTo="f7"/>
  </rules>
</nlog>

在这里,我需要从名称属性值为“默认”的元素目标获取属性 archiveAboveSize 的值。下面是我写的代码。

 XmlDocument doc = new XmlDocument();
 doc.Load("file.exe.nlog");
 var node = doc.DocumentElement.SelectSingleNode("//nlog/targets/target[@name = 'default']/@archiveAboveSize");
 return node.Value;

但是我的变量节点始终为空。我在这里做错了什么?任何帮助将不胜感激。

最佳答案

您可以使用 Linq to XML 来获取所需的属性值。

使用这一行:

var doc = XDocument.Load("file.exe.nlog");    

您可以加载 XML 文件,然后使用以下方式查询它:

var res = doc.Descendants()
             .Where(e => e.Name.LocalName == "target")
             .Where(e => e.Attribute("name").Value == "default")
             .First()
             .Attribute("archiveAboveSize").Value;

注意 LocalName 的用法属性(property)。这是由于 xml 文件中使用了命名空间。

关于c# - 从 XPath 中检索与同一节点中的另一个属性值相匹配的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43362508/

相关文章:

c# - 如何在 Windows IOT 核心中的 Raspberry pi 上获得更好的 GPIO 引脚性能

c# - 仅显示一次 C# 消息

c# - Entity Framework Core 相关数据

java - 交换 XML (WSDL) 文件中的元素属性值?

c# - 用于返回过滤值属性的 XML 表达式

c# - 我可以将原型(prototype)反序列化为对象类型吗

python - Xml - 使用 Python 按标记查找元素

php - xPath SimpleXMLElement 中的 XML 子节点

xml - 使用属性解码 xml 标签

javascript - 如何检索 xpath 的内部文本?