不知道我该如何做到这一点。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答案要好得多。 –
Breaking =“对象引用未设置为对象的实例”异常。 这是预期的。我想出了Henk Holterman刚发布的同样的东西,我试图迭代一个非迭代。但是当我试图找到正确的方式时,我只是感到困惑。 –