【发布时间】:2014-12-29 22:46:54
【问题描述】:
我的 c# 应用程序遇到了一些问题。只能获取第一个节点的属性,无法获取后面节点的属性。
XML 就是这种格式..
<ALLPRODUCTS>
<PRODUCT ITEM="1">
<QUANTITY>5</QUANTITY>
</PRODUCT>
<PRODUCT ITEM="2">
<QUANTITY>6</QUANTITY>
</PRODUCT>....
应用程序将第一个产品编号设为 1,数量为 5……但之后它只给出数量并说项目编号为空。这是我使用的代码...
while (reader.Read())
{
if (reader.Name.Equals("PRODUCT"))
{
String id;
String qty;
try
{
id = reader.GetAttribute("ITEM");
reader.ReadToFollowing("QUANTITY");
qty = reader.ReadInnerXml();
if (qty.Equals("0"))
{
oos++;
}
else
{
inStock++;
}
status.Refresh();
stockLevelList.Add(id, qty);
}
catch (Exception e)
{
MessageBox.Show(e.Message, e.Source, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
谁能指出为什么第一个产品之后的产品的 id 为空?
【问题讨论】:
-
除非您的 XML 非常庞大(即大于 25 Mb),否则您最好使用 DOM 方法,例如 XmlDocument 和 SelectNodes 进行此类操作。
-
我想你想做
reader.MoveToNextAttribute()然后检查名字看是不是ITEM。如果是,那么您可以致电reader.Value获取它。尽管如此,我可能只是将 XML 序列化与一些 POCO 一起使用,而不是与 XML Reader 对抗。它可以是相当适合开发的 PITA。 -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
感谢 cmets... TyCobb 我尝试了您的解决方案,但似乎没有什么不同。我让每次迭代都打印出“hasAttributes”评估,但在第一次之后他们都说错了。除了属性,一切似乎都在那里:/