1

我一直在阅读关于LINQ to XML的大量内容,但不幸的是,这个主题(对我来说是相当新的)根本不会点击。话虽如此,请随时纠正有关正确 XML 词汇的任何错误说法。我的目标是获取 XML 数据(如下所示),并逐个节点地读取它。在这种情况下,我希望能够打开Delimiters节点,以获取“”、“”和“”元素的值。接下来,我想从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我想听听你们所有人的最佳做法是什么,适合我的情况。

感谢您的阅读,

埃文

4

3 回答 3

5

您可能希望为此使用 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 - 你不必改变你的思维方式。

于 2011-07-24T03:45:29.853 回答
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

于 2011-07-24T03:54:06.947 回答
0

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

于 2011-07-24T03:43:55.893 回答