xElement.Descendants возвращает объединенные значения "falsefalse" - PullRequest
0 голосов
/ 23 марта 2020

Я использую следующий документ XML для управления видимостью элементов управления с помощью bools.

<?xml version="1.0" encoding="utf-8" ?>
<Testy>
  <Buttons>
    <boolean>false</boolean> <!-- button1 -->
    <boolean>false</boolean> <!-- button2 -->
  </Buttons>
</Testy>

Я пытаюсь создать массив bool на основе логических значений, показанных в XML. Вот следующий код, который я использую:

private void testy()
{
    XElement xElement = XElement.Load("Testy.xml");
    Buttons = xElement.Descendants("Buttons").Select(b =>XmlConvert.ToBoolean(b.Value)).ToArray();
}

Единственная проблема заключается в том, что он не может преобразовать в bool, поскольку строка, кажется, объединяется. Указанная ошибка c: «System.FormatException:« Строка «falsefalse» не является допустимым логическим значением. »»

Как получить их для разделения и преобразования в bool по отдельности и добавления в массив

1 Ответ

1 голос
/ 23 марта 2020

В настоящее время вы находите всех потомков с именем Buttons - у вас есть один элемент с именем Buttons, который имеет два дочерних элемента. Свойство Value XElement будет возвращать все значения текстового узла-потомка, объединенные - вот почему вы получаете «falsefalse» в качестве значения.

Вместо этого я считаю, что вы хотите выбрать boolean потомков элемента Buttons. Я бы сделал это так:

Buttons = xElement
    .Element("Buttons")
    .Elements("boolean")
    .Select(b => (bool) b)
    .ToArray();

Обратите внимание, что здесь используется явное преобразование XElement в bool вместо вызова XmlConvert.ToBoolean - это немного проще .

Я предположил, что:

  • Существует один Buttons элемент
  • Это непосредственный потомок элемента root
  • Элементы, которые вы хотите, всегда являются непосредственными потомками Buttons
  • Элементы, которые вы хотите, всегда называются boolean
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...