簡體   English   中英

循環遍歷 XDocument 的元素並獲取特定屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM