[英]looping through element of XDocument and getting specific attributes
我目前正在將我的 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
所丟失的屬性,而不是生成一個空引用異常。
因此:
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"));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.