遍历 XDocument 的元素并获取特定属性
looping through element of XDocument and getting specific attributes
我目前正在将 XmlDocument 和 XmlElements 重写为 XDocument 和 XElement。我 运行 遇到了一个小问题,我曾经只是 select 一个节点 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()
to iterate through all child elements of your requests
element, then use XElement.Attribute(XName name)
按名称获取指定的属性。
你 可能 也会考虑 explicitly casting your XAttribute
to a string rather than using the Value
属性,因为前者会 return 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"));
}
}
我目前正在将 XmlDocument 和 XmlElements 重写为 XDocument 和 XElement。我 运行 遇到了一个小问题,我曾经只是 select 一个节点 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()
to iterate through all child elements of your requests
element, then use XElement.Attribute(XName name)
按名称获取指定的属性。
你 可能 也会考虑 explicitly casting your XAttribute
to a string rather than using the Value
属性,因为前者会 return 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"));
}
}