LINQ to XML - Загрузка XML-фрагментов из файла

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

Пример:

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

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

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

Спасибо!

Ответы

Ответ 1

Здесь, как это сделать с помощью 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()));                
        }
    }
}

Ответ 2

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

myDoc=new XmlDocument();
myDoc.LoadXml("<products>"+myData+"</products>");

Ответ 3

грубо говоря, что-то вроде.

var newXML= new XElement("products",
               from x in Xdocuments.parse(originalFile).descendants("product")                       
               select new XElement("product",x.value)
            );