LINQ to XML - загрузка фрагментов XML из файла - PullRequest
13 голосов
/ 03 марта 2010

У меня есть исходные XML-файлы с несколькими корневыми элементами, и я ничего не могу с этим поделать. Как лучше всего загрузить эти фрагменты в XDocument с одним корневым узлом, который я могу создать, чтобы иметь действительный документ XML?

Пример:

<product></product>
<product></product>
<product></product>

Должно быть что-то вроде:

<products>
  <product></product>
  <product></product>
  <product></product>
</products>

Спасибо!

Ответы [ 3 ]

19 голосов
/ 04 марта 2010

Вот как это сделать с XmlReader, который, вероятно, является наиболее гибким и быстродействующим подходом:

XmlReaderSettings xrs = new XmlReaderSettings();
xrs.ConformanceLevel = ConformanceLevel.Fragment;

XDocument doc = new XDocument(new XElement("root"));
XElement root = doc.Descendants().First();

using (StreamReader fs = new StreamReader("XmlFile1.xml"))
using (XmlReader xr = XmlReader.Create(fs, xrs))
{
    while(xr.Read())
    {
        if (xr.NodeType == XmlNodeType.Element)
        {
            root.Add(XElement.Load(xr.ReadSubtree()));                
        }
    }
}
8 голосов
/ 03 марта 2010

Я оставлю вас, чтобы поместить это в строковое поле, но вы можете сделать это:

myDoc=new XmlDocument();
myDoc.LoadXml("<products>"+myData+"</products>");
0 голосов
/ 03 марта 2010

примерно, что-то вроде.

var newXML= new XElement("products",
               from x in Xdocuments.parse(originalFile).descendants("product")                       
               select new XElement("product",x.value)
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...