пытается прочитать XML-файл и получить данные только из одного дочернего узла, используя c# - PullRequest
0 голосов
/ 05 августа 2020

Я читаю из файла XML, и он извлекает правильные данные, но извлекает данные из 2 разных узлов из-за повторения атрибутов «сервер», «база данных» и «пользователь». Когда программа запускается, она запускается через оба, а не только через один узел, через который мне нужно пройти. Как я могу заставить его просто получать данные с узла Код выглядит следующим образом:

XmlDocument doc = new XmlDocument();
doc.Load("xmlConnection.xml");

foreach (XmlNode node in doc.DocumentElement)
{
    string databaseConnection = node.Attributes[0].InnerText;
    if (databaseConnection == "MySQL")
    {
        foreach (XmlElement element in doc.DocumentElement)
        {
            foreach (XmlNode child in node.SelectNodes("//MySQL_Connection_string"))
            {
                MySQLServer = element.GetAttribute("Server");
                MySQLDatabase = element.GetAttribute("Database");
                MySQLUser = element.GetAttribute("user");
                MySQLPassword = element.GetAttribute("password");
                Console.WriteLine(MySQLServer);
                Console.WriteLine(MySQLDatabase);
                Console.WriteLine(MySQLUser);
                Console.WriteLine(MySQLPassword);
            }
        }
    }
}

console.writeline просто для просмотра выходных данных, код xml равен

<?xml version="1.0" encoding="utf-8"?>
<Database_Connections>
    <MySQL_Connection_string Database_Connection="MySQL" Server="***" Database="littering_detection_jf" user="jordan" password="***" />
    <PostgreSQL_Connection_string Database_Connection="postgreSQL" host="***" username="Jordan" password="***" database="intuvision" Port="***" />
    <SQL_connection_string Database_Connection="SQL" Server="****" Database="anprdb" user="Jordan" password="***" />
</Database_Connections>

1 Ответ

0 голосов
/ 05 августа 2020

Избавьтесь от всех циклов foreach, кроме внутреннего:

foreach (XmlElement child in doc.SelectNodes("//MySQL_Connection_string"))
{
    MySQLServer = child.GetAttribute("Server");
    MySQLDatabase = child.GetAttribute("Database");
    MySQLUser = child.GetAttribute("user");
    MySQLPassword = child.GetAttribute("password");
    Console.WriteLine(MySQLServer);
    Console.WriteLine(MySQLDatabase);
    Console.WriteLine(MySQLUser);
    Console.WriteLine(MySQLPassword);
    break; // not interested in any additional MySQL_Connection_string elements
}

Это предполагает, что doc.SelectNodes("//MySQL_Connection_string") возвращает только XML элементов, никаких других типов узлов, как здесь, поэтому я заменил ваш XmlNode child на XmlElement child.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...