我们假设我有一个像这样的xml:
<articles>
<article>
<id>1</id>
<name>A1</name>
<price>10</price>
</article>
<article>
<id>2</id>
<name>A2</name>
</article>
<article>
<id>3</id>
<name>A3</name>
<price>30</price>
</article>
</articles>
如您所见,文章A2缺少价格标签。
我有一个真实世界的案例,我解析xml文件,其中一些文章中的某些标签丢失(我之前不知道)。我写了一个非常简单的解析器:
using (XmlReader reader = XmlReader.Create(new StringReader(myXml)))
{
while (true)
{
bool articleExists = reader.ReadToFollowing("article");
if (!articleExists) return;
reader.ReadToFollowing("id");
string id = reader.ReadElementContentAsString();
reader.ReadToFollowing("name");
string name = reader.ReadElementContentAsString();
reader.ReadToFollowing("price");
string price = reader.ReadElementContentAsString();
//do something with these values
}
但是,如果第2条中没有价格标签,xmlreader会跳转到第A3条中的价格标签,我会将文章混淆并跳过一些数据,对吗?
我该怎样保护?因此,如果文章节点中的某些标签不存在,那么让我们说使用默认值?
如果可能,我仍然想使用xmlreader。我的真实文件大200 MB,所以我需要一个简单,快速,高效的解决方案,不会挂起系统。