C # Самый простой способ получить данные XML - PullRequest
1 голос
/ 24 июля 2011

Я много читал о 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>

Я прочитал XMLTextReader, а также XMLReader, но я хотел бы услышать от всех вас, каковы лучшие практики для моей ситуации здесь.

Спасибо за чтение,

Evan

Ответы [ 3 ]

5 голосов
/ 24 июля 2011

Вы, вероятно, захотите использовать 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 для XML является то, что не только очень легко запрашивать нужные узлы (для вашего примера это не большая разница, но и значительно экономит в более сложных XML), но синтаксис запросов становится вездесущим, когда познакомьтесь с Linq в целом - вам не нужно менять способ мышления.

2 голосов
/ 24 июля 2011

Я склонен использовать объект 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

0 голосов
/ 24 июля 2011

XmlDocument, пожалуй, самый простой способ для достижения этой цели, на мой взгляд (вы можете найти много документации об этом).Если ваши объекты хранятся в файле XML, вы можете посмотреть сериализацию и десериализацию XML (вы можете в значительной степени прочитать весь файл XML в одну строку и заполнить ваши структуры).

...