C#获取XML数据的最简单方法

时间:2011-07-24 03:39:55

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

我一直在LINQ to XML上做很多阅读但不幸的是这个话题(对我来说相当新)根本就不会点击。话虽如此,请随时纠正有关正确的XML词汇表的任何错误说法。我的目标是获取XML数据(如下所示),并逐节点地读取它。在这种情况下,我希望能够打开分隔符节点,以获取“一个”,“两个的值“和”三个“元素。接下来,我想从一个”,“两个”和“三个”元素的值> 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>

我已阅读XMLTextReader以及XMLReader,但我想听听各位对我这种情况的最佳做法。

感谢您阅读,

埃文

3 个答案:

答案 0 :(得分:5)

您可能希望将Linq用于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对XML的一大优势在于,查询所需节点不仅非常容易(对于您的示例没有太大区别,但它在更复杂的XML中节省了很多),但查询语法无处不在。熟悉Linq一般 - 你不必改变你的想法。

答案 1 :(得分: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

答案 2 :(得分:0)

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