不知道我該如何做到這一點。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剛發佈的同樣的東西,我試圖迭代一個非迭代。但是當我試圖找到正確的方式時,我只是感到困惑。 –