【发布时间】:2017-06-10 07:46:28
【问题描述】:
不知道我应该怎么做。
这是我正在使用的 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 刚刚发布的同一件事,即我正在尝试迭代一个不可迭代的对象。但是当我试图找到正确的方法时,我却让自己感到困惑。
-
删除 Nodes()
foreach (XElement item2 in item1.Elements("item_type2")) -
你看,我猜错了。但是请务必将其添加到问题中。此处不计评论。