【问题标题】:How can I get XmlReader to read my XML data in C#如何让 XmlReader 在 C# 中读取我的 XML 数据
【发布时间】:2013-06-16 06:54:28
【问题描述】:

我正在使用以下 Microsoft 示例代码来读取 XML:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            StringBuilder output = new StringBuilder();

            String xmlString =
                    @"<?xml version='1.0'?>
        <!-- This is a sample XML document -->
        <Items>
          <Item>test with a child element <more/> stuff</Item>
        </Items>";
            // Create an XmlReader
            using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
            {
                XmlWriterSettings ws = new XmlWriterSettings();
                ws.Indent = true;
                using (XmlWriter writer = XmlWriter.Create(output, ws))
                {

                    // Parse the file and display each of the nodes.
                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {
                            case XmlNodeType.Element:
                                writer.WriteStartElement(reader.Name);
                                break;
                            case XmlNodeType.Text:
                                writer.WriteString(reader.Value);
                                break;
                            case XmlNodeType.XmlDeclaration:
                            case XmlNodeType.ProcessingInstruction:
                                writer.WriteProcessingInstruction(reader.Name, reader.Value);
                                break;
                            case XmlNodeType.Comment:
                                writer.WriteComment(reader.Value);
                                break;
                            case XmlNodeType.EndElement:
                                writer.WriteFullEndElement();
                                break;
                        }
                    }

                }
            }
            var OutputTextBlock.Text = output.ToString();
        }
    }
}

但它给了我一个错误,说 OutputTextBlock 不存在。

我尝试在此之前放置一个 var,但仍然出现错误。说隐式类型的变量必须被初始化。有人可以告诉我我做错了什么。

有没有更简单的方法可以做到这一点?

我发布了这个问题:How can I extract one element of data out of an XML file on my Windows desktop?

但答案就是使用 XmlReader。我不确定从哪里开始。我想将另一个问题标记为已回答,但没有人回答。

【问题讨论】:

  • 您是否考虑改用XDocument?我认为比 XmlReader 更容易使用。
  • 谢谢 - 我什至不知道 XDocument。我以前从来没有这样做过。我会看看那个。我仍然希望有人能给我一个让我开始的例子。我完全不了解 XML。

标签: c# xml xmlreader


【解决方案1】:

您的代码中的问题与 XML 无关 - 它只是假定存在 一个名为 OutputTextBlock 的变量的示例代码。这表明演示代码是在 WPF 应用而不是控制台应用的上下文中编写的。

如果您只是将代码更改为:

Console.WriteLine(output.ToString());

那你应该没事。

但是,我强烈建议使用 LINQ to XML 和 XDocument。读取 XML 文档非常简单:

String xmlString = @"<?xml version='1.0'?>
    <!-- This is a sample XML document -->
    <Items>
      <Item>test with a child element <more/> stuff</Item>
    </Items>";
XDocument doc = XDocument.Parse(xmlString);

然后您可以在文档等中找到特定元素。请从LINQ to XML "root" page on MSDN 开始了解更多详细信息。

【讨论】:

  • 嗨乔恩。感谢您的建议。我会调查你的建议。 LINQ to XML 和 XDocument 是一起使用的还是两者之一?
  • @Gemma: XDocument 是 LINQ to XML API 中的一种类型。
  • 谢谢乔恩。我会将其标记为正确,然后去看看使用您的建议。
【解决方案2】:

其实在这个示例中,你必须添加 writer.Flush();在 while (reader.Read()) 循环结束时,否则输出保持为空。 在显示输出值之后,将代码更改为:Console.WriteLine(output.ToString());

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2011-01-27
    • 2014-03-20
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多