Der einzige In-Memory-Baum-Darstellungen in dem .NET-Framework, die mit Fragmenten sind die XmlDocumentFragment
in .NET die DOM-Implementierung umgehen können, so dass Sie müssten um ein XmlDocument
und ein Fragment mit z
XmlDocument doc = new XmlDocument();
XmlDocumentFragment frag = doc.CreateDocumentFragment();
frag.InnerXml = stringWithXml; // for instance
// frag.InnerXml = File.ReadAllText("fragment.xml");
oder ist XPathDocument
wo Sie eine erstellen können ein XmlReader mit ConformanceLevel mit auf Fragment:
XPathDocument doc;
using (XmlReader xr =
XmlReader.Create("fragment.xml",
new XmlReaderSettings()
{
ConformanceLevel = ConformanceLevel.Fragment
}))
{
doc = new XPathDocument(xr);
}
// new create XPathNavigator for read out data e.g.
XPathNavigator nav = doc.CreateNavigator();
Offensichtlich XPathNavigator ist schreibgeschützt.
Wenn Sie LINQ zu XML verwenden möchten, stimme ich den gemachten Vorschlägen zu, dass Sie ein XElement als Wrapper erstellen müssen. Anstatt eine Zeichenkette mit dem Dateiinhalt einzuziehen, könnten Sie jedoch XNode.ReadFrom
mit einem XmlReader verwenden, z.
public static class MyExtensions
{
public static IEnumerable<XNode> ParseFragment(XmlReader xr)
{
xr.MoveToContent();
XNode node;
while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null)
{
yield return node;
}
}
}
dann
XElement root = new XElement("root",
MyExtensions.ParseFragment(XmlReader.Create(
"fragment.xml",
new XmlReaderSettings() {
ConformanceLevel = ConformanceLevel.Fragment })));
, die besser funktionieren könnte und effizienter als alles in einen String zu lesen.
'XDocument.Load' funktioniert nicht, da diese Art von Datei kein gültiges XML-Dokument ist. – MarcinJuraszek
Können Sie den Code posten, den Sie bisher ausprobiert haben? – christiandev
Andere Frage, gleiche Antwort: http://StackOverflow.com/A/9378442 – dtb