Разбор C # Xml от StringBuilder - PullRequest
       46

Разбор C # Xml от StringBuilder

3 голосов
/ 24 сентября 2010

У меня есть StringBuilder с содержимым файла XML.Внутри XML-файла находится корневой тег с именем <root>, который содержит несколько тегов <node>.

Я бы хотел проанализировать XML, чтобы прочитать значения тегов внутри в s, но не уверен, как это сделатьit.

Придется ли мне использовать для этого какой-нибудь тип данных C # XML?

Заранее спасибо

Ответы [ 7 ]

6 голосов
/ 24 сентября 2010
StringBuilder sb = new StringBuilder (xml);

TextReader textReader = new StringReader (sb.ToString ());
XDocument xmlDocument = XDocument.Load (textReader);

var nodeValueList = from node in xmlDocument.Descendants ("node")
                    select node.Value;
2 голосов
/ 24 сентября 2010

Для анализа XML следует использовать классы, доступные в System.Xml или System.Xml.Linq.

XDocument является частью расширений LINQ для XML и особенно прост в использовании, если вам нужно проанализировать произвольную структуру. Я бы предложил использовать его вместо XmlDocument (если у вас нет устаревшего кода или вы не используете .NET 3.5).

Создать XDocument из StringBuilder просто:

var doc = XDocument.Parse( stringBuilder.ToString() );

Здесь вы можете использовать FirstNode, Descendents() и многие другие свойства и методы, доступные для просмотра и изучения структуры XML. А поскольку XDocument хорошо работает с LINQ, вы также можете писать запросы вроде:

var someData = from node in doc.Descendants ("yourNodeType")
               select node.Value; // etc..
1 голос
/ 24 сентября 2010

Если вы просто просматриваете узлы с конкретными именами, вам не нужно загружать документ в память, вы можете обработать его самостоятельно с помощью XmlReader.

using(var sr = new StringReader(stringBuilder.ToString)) {
  using(var xr = XmlReader.Create(sr)) {
    while(xr.Read()) {
      if(xr.IsStartElement() && xr.LocalName == "node")
        xr.ReadElementString(); //Do something here
    }
  }
}
0 голосов
/ 24 сентября 2010

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

Десериализация XML в класс obj в C #

0 голосов
/ 24 сентября 2010

В вашем распоряжении несколько объектов для работы с XML.Посмотрите на пространство имен System.Xml для таких объектов, как XmlDocument, а также семейства объектов XmlReader и XmlWriter.Если вы используете C # 3.0+, посмотрите на пространство имен System.Xml.Linq и класс XDocument.

0 голосов
/ 24 сентября 2010

Да, я предлагаю вам использовать XmlDocument объект для анализа содержимого вашей строки. Вот пример, который печатает весь внутренний текст, содержащийся в ваших тегах:

var doc=new XmlDocument();
doc.LoadXml(stringBuilder.TosTring());
XmlNodeList elemList = doc.GetElementsByTagName("node");
for (int i=0; i < elemList.Count; i++)
{   
  XmlNode node=elemList[i];
  Console.WriteLine(node.InnerText);
}  

используя члены объекта Node, вы также можете легко извлечь все свои атрибуты.

0 голосов
/ 24 сентября 2010

использовать XDocument.Parse (...)

...