【问题标题】:How do I add blanks for skipped elements in an xml for XmlReader?如何在 XmlReader 的 xml 中为跳过的元素添加空格?
【发布时间】:2011-09-25 23:10:40
【问题描述】:

我正在使用 XmlReader 读取 xml 文件。我无法控制 xml 文件,有时 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 添加元素?

更新: 我将代码修改为只是一个输出,这是预期的输出:
1
10
1
" "

我希望第 2 部分的输出显示带有空格的字符串 " " 用于缺少元素,例如绘图。

【问题讨论】:

  • 使用XmlReader吗? LINQ to XML 会简单得多...
  • 我不必,我从来没有使用过 LINQ to XML,这就是 XmlReader 的主要原因。如果允许我将跳过的元素添加到 ArrayList,我会很乐意使用 LINQ to XML。
  • 我想我们都对你在这里想要完成的事情感到困惑。你能告诉我们你想要的输出吗?我认为可能有更好的方法来实现你想要的。
  • 请告诉我们什么是“创造你的输出”
  • 你为什么使用ArrayList?自 .NET 2.0 以来,它已被弃用。

标签: c# xml xmlreader


【解决方案1】:

我认为您可以尝试与此示例非常接近的语法:

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);


}

【讨论】:

  • 听起来他想在一个零件数组中搜索一个元素名称,并为每个零件附加值或一些默认值到他的数组列表中。
  • 我的命名空间有点问题,但根据您的代码让它正常工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多