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)
);