Цикл по разделу конфигурации для чтения его элементов с использованием C # - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть файл конфигурации, что-то вроде:

<logonurls>
  <othersettings>
    <setting name="DefaultEnv" serializeAs="String">
      <value>DEV</value>
    </setting>
  </othersettings>
  <urls>      
    <setting name="DEV" serializeAs="String">
      <value>http://login.dev.server.com/Logon.asmx</value>
    </setting>
    <setting name="IDE" serializeAs="String">
      <value>http://login.ide.server.com/Logon.asmx</value>
    </setting>
  </urls>
  <credentials>
    <setting name="LoginUserId" serializeAs="String">
      <value>abc</value>
    </setting>
    <setting name="LoginPassword" serializeAs="String">
      <value>123</value>
    </setting>
  </credentials>    
</logonurls>

Как я могу прочитать конфигурацию, чтобы получить переданное значение имени ключа. Вот метод, который я написал:

private static string GetKeyValue(string keyname)
{
    string rtnvalue = String.Empty;
    try
    {
        ConfigurationSectionGroup sectionGroup = config.GetSectionGroup("logonurls");
        foreach (ConfigurationSection section in sectionGroup.Sections)
        {
            //I want to loop through all the settings element of the section
        }
    }
    catch (Exception e)
    {
    }
    return rtnvalue;
}

config - это переменная конфигурации, которая содержит данные из файла конфигурации.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Загрузите файл конфигурации в XmlDocument, получите XmlElement по имени (значение параметра, которое вы хотите прочитать) и попробуйте следующий код.

System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(xmlfilename);

XmlElement elem = doc.GetElementByName("keyname");
var allDescendants = myElement.DescendantsAndSelf();
var allDescendantsWithAttributes = allDescendants.SelectMany(elem =>
    new[] { elem }.Concat(elem.Attributes().Cast<XContainer>()));

foreach (XContainer elementOrAttribute in allDescendantsWithAttributes)
{
    // ...
}

Как написать один запрос LINQ to XML для перебора всех дочерних элементов и всех атрибутов дочерних элементов?

0 голосов
/ 15 апреля 2011

Преобразуйте его в правильный XML и выполните поиск по узлам:

private static string GetKeyValue(string keyname)
{
    string rtnValue = String.Empty;
    try
    {
        ConfigurationSectionGroup sectionGroup = config.GetSectionGroup("logonurls");
        System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
        doc.LoadXml(sectionGroup);

        foreach (System.Xml.XmlNode node in doc.ChildNodes)    
        {    
            // I want to loop through all the settings element of the section
            Console.WriteLine(node.Value);
        }
    }
    catch (Exception e)
    {
    }

    return rtnValue; 
}

Просто небольшое замечание: если вы конвертируете его в XML, вы также можете использовать XPath для получения значений.

System.Xml.XmlNode element = doc.SelectSingleNode("/NODE");
...