xElement.Descendants возвращает объединенные значения «falsefalse»

Я использую следующий 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, так как кажется, что строка объединяется. Конкретная ошибка: «System.FormatException:« Строка «falsefalse» не является допустимым логическим значением ».»

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

Всего 1 ответ


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

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

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

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

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

  • Там один элемент Buttons
  • Это непосредственный потомок корневого элемента
  • Элементы, которые вы хотите, всегда являются непосредственными потомками Buttons
  • Элементы, которые вы хотите, всегда называются boolean

Есть идеи?

10000