获取XML数据的最简单方法

本文关键字:最简单 方法 数据 XML 获取 | 更新日期: 2023-09-27 18:03:10

我已经读了很多关于LINQ to XML的文章,但不幸的是,这个主题(对我来说相当新)根本不适合。话虽如此,请随时纠正有关正确XML词汇表的任何错误。我的目标是获取XML数据(如下所示),并逐个节点读取它。在本例中,我希望能够打开分隔符节点,以便获得"一个"、"两个"answers"三个"元素的值。接下来,我想从Sources/SourceType节点中获取"一个"、"两个"answers"三个"元素的值。

<?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,但我想听听你们所有人对我的情况的最佳实践是什么。

谢谢你的阅读,

艾凡

获取XML数据的最简单方法

您可能需要使用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,查询语法就无处不在-您不必改变您的思维方式。

我倾向于使用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

在我看来,

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