2011-06-30 42 views
0

我正在使用XmlReader读取一个xml文件。我无法控制xml文件,有时xml文件会跳过如下所示的元素。如何在XmlReader的xml中为跳过的元素添加空白?

<Part xsi:type="Part1"> 
    <Quantity>1</Quantity> 
    <Drawing>10</Drawing> 
</Part> 
<Part xsi:type="Part2"> 
    <Quantity>1</Quantity> 
</Part> 

图纸和重量在第一项(第1部分)中,但不在第二项中(第2部分)。 这个XML有1300个条目(部分),并不是所有条目(部分)都具有上述所有元素。

我的XmlReader代码如下。

private void Select(string elem, ArrayList al) 
{ 
using (XmlReader reader = new XmlTextReader(xml)) 
{ 
    while (reader.Read()) 
    { 
    if (reader.NodeType == XmlNodeType.Element) 
    { 
     if (reader.Name == elem && reader.IsStartElement()) 
     { 
      string output = reader.ReadString(); 

      Console.WriteLine(output); 
     }}}}} 

当元素不在xml中的条目(部分)中时,如何处理向Arraylist添加元素?

更新: 我修改的代码只是一个输出,这里是所期望的输出:
“”

我想第2部分的输出,以显示空间" "的字符串,用于缺少绘图等元素。

+2

你*有*到使用XmlReader? LINQ to XML将会相当简单... –

+0

我不需要,我从来没有用过LINQ to XML,这是XmlReader的主要原因。如果允许我将跳过的元素添加到ArrayList,我会很乐意使用LINQ to XML。 – sange

+0

我想我们都对你在这里试图完成的事感到困惑。你能告诉我们你想要的输出吗?我认为可能有更好的方法来实现你想要的。 – Nix

回答

2

我想你可以尝试语法vwery接近这个例子:

Reading XML through LINQ

可以测试节点的存在,像这样的东西:

XDocument document = XDocument.Load("file.xml"); 

foreach (XElement item in document.Descendants("Part")) 
{ 
    if (item.Element("Quantity") == null) 
     al.add(string.Empty); 
    else 
     al.add(item.Element("Quantity").value); 


} 
+0

这听起来像他想要搜索一个元素名称的零件数组,并为每个部分追加值或一些默认值到他的数组列表中。 – Nix

+0

我已更新我的帖子! – danyolgiax

+0

我的命名空间有点麻烦,但是根据你的代码让它工作。非常感谢你。 – sange