Я чувствую, что это действительно глупо, но не могу понять это.
У меня есть Combobox, который заполняется из файла XML и отлично работает. Теперь я хочу отобразить определенный элемент (описание) при выборе элемента, но строка всегда хочет вернуть значение null.
XML:
<?xml version = "1.0" encoding = "utf-8" ?>
<Barbarian>
<Special id = "Lesser Ancestor Totem">
<SpecialName>Lesser Ancestor Totem</SpecialName>
<Description>Gain a +2 Insight Bonus to a skill (that you can use while raging) while raging</Description>
</Special>
</Barbarian>
Код для получения описания и помещения его в RichTextBox:
public void LoadFeatDescription()
{
string Class = CharClassSelector.Text;
string Feat = FeatPicker.Text;
XDocument doc = XDocument.Load($"\\Xml\\Classes\\{Class}.xml");
string description = doc.XPathSelectElement($"//Special[@id='{Feat}']/Description").Value;
//the string description wants to stay null despite my efforts
DescriptionBox.Text = description;
}
Идея состоит в том, что это загрузит определенный файл и получит элемент описания на основе идентификатора. Я пропустил что-то глупое?
Спасибо!
Обновлено: добавлено во все содержимое XML
@AlexanderPetrov Я не учел корень. ``` <Варвар> <Special id = "Lesser Ancestor Totem"> <SpecialName>Lesser Ancestor Totem</SpecialName> <Description>Получите бонус +2 к навыку (который вы можете использовать в ярости) во время ярости</ Description> </Special> </Barbarian> ``` Но даже добавление этого в XpathSelectElement дает нулевое значение.
Используйте следующее: string description = (string)doc.Descendants("Description").FirstOrDefault();
@jdweng Это описание есть, но только для первого. Когда я пытаюсь добавить еще, он будет показывать только первый. Мне нужно иметь возможность получить описание элемента на основе идентификатора.
Обновлено: string[] description = doc.Descendants("Description").Select(x => (string)x).ToArray();





Я понял.
Изменено string description = doc.XPathSelectElement($"//Special[@id='{Feat}']/Description").Value;
к
string description = (string)doc.XPathSelectElement($"//Special[@id='{Feat}']/Description").Value;
Я знал, что это какая-то глупость...
Вы показали весь xml или только его часть? У вас есть пространства имен в xml?