循环遍历XDocument的元素并获取特定属性
本文关键字:获取 属性 元素 遍历 XDocument 循环 | 更新日期: 2023-09-27 18:21:48
我目前正在将XmlDocument和XmlElements重写为XDocument和XElement。我遇到了一个小问题,我过去只是简单地选择一个节点ModuleRequests
,然后循环通过它
var propertiesRequested = new XmlDocument();
propertiesRequested.LoadXml(propertiesConfiguration);
var requests = propertiesRequested.SelectSingleNode("ModuleRequests");
foreach (XmlNode request in requests)
{
var propertyValue = request.Attributes["Id"].Value;
if (systemProperties.ContainsKey(propertyValue) == false)
{
systemProperties.Add(propertyValue, request.Attributes["Request"].Value);
}
}
对此:
var propertiesRequested = XDocument.Parse(propertiesConfiguration);
var requests = propertiesRequested.Element("ModuleRequests");
foreach (XNode request in requests)
{
var propertyValue = request.Attributes["Id"].Value;
if (systemProperties.ContainsKey(propertyValue) == false)
{
systemProperties.Add(propertyValue, request.Attributes["Request"].Value);
}
}
不用说,这并没有那么容易,然后我想我会成功的:
foreach(XNode request in requests.Nodes())
但这给我带来了更多的问题,因为XNode没有属性。
正如你可能知道的,在xml阅读方面,我有点新手。我希望有人能帮我。从XmlDocument重写到XDocument 的正确方法是什么
您希望使用XElement.Elements()
迭代requests
元素的所有子元素,然后使用XElement.Attribute(XName name)
按名称获取指定的属性。
还可以考虑将XAttribute
显式强制转换为字符串,而不是使用Value
属性,因为前者将在缺少的属性上返回null
,而不是生成null引用异常。
因此:
var propertiesRequested = XDocument.Parse(propertiesConfiguration);
var requests = propertiesRequested.Element("ModuleRequests");
foreach (var request in requests.Elements())
{
var propertyValue = (string)request.Attribute("Id");
if (systemProperties.ContainsKey(propertyValue) == false)
{
systemProperties.Add(propertyValue, (string)request.Attribute("Request"));
}
}