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

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

Образец:

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

Должно быть что-то как:

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

Спасибо!

14
задан Fouad Masoud 3 March 2010 в 19:47
поделиться

3 ответа

Вот как это сделать с помощью 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()));                
        }
    }
}
20
ответ дан 1 December 2019 в 12:26
поделиться

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

myDoc=new XmlDocument();
myDoc.LoadXml("<products>"+myData+"</products>");
8
ответ дан 1 December 2019 в 12:26
поделиться

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

var newXML= new XElement("products",
               from x in Xdocuments.parse(originalFile).descendants("product")                       
               select new XElement("product",x.value)
            );
-5
ответ дан 1 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: