Я думаю, что следующий код сделает то, что вы ищете. Вы не упомянули, какой тип полей вы используете, но вы упомянули city.Text
, поэтому я просто использовал TextBox
в качестве примера. Как Crowcoder указал в комментариях, пожалуйста, постарайтесь предоставить нам достаточно кода и информации, чтобы мы могли воспроизвести проблему, с которой вы столкнулись. Если, например, вы используете шаблон проектирования MVVM, в моем ответе потребуется использовать связываемые свойства publi c вместо прямого доступа к элементам управления окна.
Если вы новичок в программировании, мой пример MVVM может ничего не значить для вас, но это не важно. Я просто указываю, что ответы будут меняться в зависимости от предоставленной вами информации. Попробуйте предоставить все основы. Например, «Я использую стандартный проект WPF. У меня есть окно, содержащее 5 текстовых полей, и я хочу загрузить в эти поля содержимое файла XML». Затем предоставьте код XAML для вашего окна, код C#, который вы используете для загрузки файла XML et c. и объясните проблему как у вас. Мы просим об этом, так как это облегчает нам помощь вам и облегчает понимание вопроса и решения всем, у кого есть такая же / похожая проблема. Вот ссылка, которую Crowcoder уже предоставил для руководства StackOverflow по размещению вопросов: { ссылка }
Ответ и объяснение
Чтобы объяснить мой ответ, Сначала я нашел узел root из вашего файла XML (т.е. узел ). Метод SelectSingleNode()
использует язык запросов XPath для поиска искомого узла. /
, который я использовал в doc.SelectSingleNode("/information");
, указывает метод выбора из узла root. Вы можете найти больше примеров синтаксиса XPath здесь: https://www.w3schools.com/xml/xpath_syntax.asp
Затем l oop через каждого из дочерних узлов в узле root, проверьте, начинается ли имя дочернего узла с 'post' и удалите его, если есть. Наконец, я пытаюсь найти TextBox
с совпадающим именем и установить для его содержимого значение дочернего узла.
XmlDocument doc = new XmlDocument();
doc.Load("config.xml");
XmlNode rootNode = doc.SelectSingleNode("/information"); // Select the root <information> node
foreach (XmlNode childNode in rootNode.ChildNodes) // Loop through every child node within the root node
{
string name = childNode.Name;
if (name.StartsWith("post"))
{
name = name.Remove(0, 4); // Remove "post" from the beginning of the name
}
TextBox textBox = this.FindName(name) as TextBox; // Find the control on your window with the matching name
if (textBox != null)
{
textBox.Text = childNode.Value;
}
}
Если вы используете C# 7.0 или новее (Visual Studio 2017 или позже) следующее:
TextBox textBox = this.FindName(name) as TextBox; // Find the control on your window with the matching name
if (textBox != null)
{
textBox.Text = childNode.Value;
}
можно упростить, используя сопоставление с образцом:
if (this.FindName(name) is TextBox textBox) // Find the control on your window with the matching name
{
textBox.Text = value;
}
Вы можете найти дополнительную информацию о сопоставлении с образцом, используя is
здесь: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is