避免在xml阅读器中跳过元素

时间:2017-03-21 16:26:04

标签: c# xml

我们假设我有一个像这样的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,所以我需要一个简单,快速,高效的解决方案,不会挂起系统。

0 个答案:

没有答案