从与同一节点的另一个属性值匹配的 XPath 中检索属性值
Retrieving attribute value from XPath matching another attribute value from the same node
我正在尝试读取一个属性的值,检查另一个属性的值。下面是我的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>
在这里,我需要从具有name属性值为"default"的元素目标中获取属性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 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
属性 的用法。这是因为您的 xml 文件中使用了命名空间。
我正在尝试读取一个属性的值,检查另一个属性的值。下面是我的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>
在这里,我需要从具有name属性值为"default"的元素目标中获取属性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 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
属性 的用法。这是因为您的 xml 文件中使用了命名空间。