【问题标题】:C# The simplest way to obtain XML DataC#获取XML数据的最简单方法
【发布时间】:2011-10-11 21:34:17
【问题描述】:

我在LINQ to XML 上进行了大量阅读,但不幸的是,这个主题(对我来说相当新)根本不会点击。话虽如此,请随时纠正有关正确 XML 词汇的任何错误说法。我的目标是获取 XML 数据(如下所示),并逐个节点地读取它。在这种情况下,我希望能够打开 Delimiters 节点,以获取“one”、“two”的值”和“三个”元素。接下来,我想从 中获取“one”、“two”和“three”元素的值>Sources/SourceType 节点。

<?xml version="1.0"?>
<Values>

  <Delimiters>
    <one>delim 1</one>
    <two>delim 2</two>
    <three>delim 3</three>
  </Delimiters>

  <Sources>

    <SourceType>
      <one>type 1</one>
      <two>type 2</two>
      <three>type 3</three>
    </SourceType>

  </Sources>

</Values>

我已经阅读了XMLTextReaderXMLReader,但我想听听你们所有人对我的情况的最佳做法。

感谢您的阅读,

埃文

【问题讨论】:

    标签: c# xml linq-to-xml readxml


    【解决方案1】:

    您可能希望为此使用 Linq to XML - 解析很简单:

    XDocument doc = XDocument.Load("test.xml");
    foreach (var delimiter in doc.Descendants("Delimiters").Elements())
        Console.WriteLine(string.Format("{0} : {1}", delimiter.Name, delimiter.Value));
    
    foreach (var type in doc.Descendants("SourceType").Elements())
        Console.WriteLine(string.Format("{0} : {1}", type.Name, type.Value));
    

    Linq to XML 的最大优势在于,它不仅可以很容易地查询到您想要的节点(对您而言没有太大区别,但它在更复杂的 XML 中节省了很多),而且查询语法在您使用后无处不在大体上熟悉 Linq - 您不必改变自己的思维方式。

    【讨论】:

    • 我非常感谢这个答案。太感谢了!这将我刚刚阅读的所有内容置于如此完美、易于理解的上下文中。再次感谢您!
    【解决方案2】:

    我倾向于使用 XmlDocument 对象并使用 XPath 表达式搜索节点。

    // Load the xml into the reader
    XmlReader reader;
    
    XmlDocument dom = new XmlDocument()
    dom.Load(reader);
    
    XmlNodeList delimitorNode = dom.SelectSingleNode("/Values/Delimitors")
    if (delmitorNode != null) {
        foreach(XmlNode childNode in delimitorNode.ChildNodes) {
            string delimitor = childNode.InnerText;
        }
    }
    
    XmlNodeList sourceNode = dom.SelectSingleNode("/Values/Sources/SourceType")
    if (sourceNode != null) {
        foreach(XmlNode childNode in sourceNode.ChildNodes) {
            string sourceType = childNode.InnerText;
        }
    }
    

    W3Schools 提供了 XPath 语法的快速参考,并且有许多指南可以了解更高级的功能。 http://www.w3schools.com/xpath/xpath_syntax.asp

    【讨论】:

    • 再次,精彩的回应。 BrokenGlass 刚开始做。
    【解决方案3】:

    在我看来,XmlDocument 可能是完成此任务的最简单方法(您可以找到很多关于此的文档)。如果您的对象存储在 XML 文件中,您可能需要查看 XML 序列化和反序列化(您几乎可以在一行中读取整个 XML 文件并填充您的结构)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 2012-01-04
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多