Не знаете, как я должен это делать.C# Элементы элементов, использующие XElement
Вот XML Я работаю с:
<configuration>
<tag1>
<interestingstuff>avalue</interestingstuff>
</tag1>
<tag2>
<item_type1 name="foo">
<item_type2 name="bar">
<property>value1</property>
<property>value2</property>
</item_type2>
<item_type2 name="pub">
<property>valueX</property>
<property>valyeY</property>
</item_type2>
<item_type1>
<item_type1 name="foo2">
<item_type2 name="pub">
<property>valueX</property>
</item_type2>
</item_type1>
</tag2>
</configuration>
Я пишу функцию, которая передает значение ITEM_TYPE и item_type2, и возвращает список значений свойств для этой комбинации.
Вот что у меня есть. Он выбрасывает исключение «Объект, не установленный в экземпляр объекта» в указанной точке.
ArrayList properties = new ArrayList();
XDocument config = new XDocument();
config = XDocument.Parse(XML_Text);
foreach (XElement item1 in config.Root.Element("tag2").Nodes())
{
if (item1.Attribute("name").Value.ToString() == passed_item1_value)
{
//this is where it's breaking
foreach (XElement item2 in item1.Elements("item_type2").Nodes())
{
if item2.Attribute("name").Value.ToString() == passed_item2_value)
{
foreach (XElement property in item2.Elements("property").Nodes())
{
properties.Add(property.Value.ToString());
}
break;
}
}
break;
}
}
Я ЗНАЮ, что это не имеет смысла - но я не могу сделать это имеющим смысл.
Как это «нарушение»? Всегда включайте полные сообщения об ошибках. –
Прямой ответ (я думаю), что XElement не может перебирать Nodes(). Но ответ Linq ниже намного лучше. –
Исключение прерывания = исключение объекта ссылка на экземпляр объекта. Что ожидается. Я понял то же самое, что только что опубликовал Хенк Холтерман, что я пытаюсь выполнить итерацию по неиспользуемому. Но когда я попытался найти правильный путь, я просто смутился. –