Problem mit Xelement und XSlcompiledTransform
-
24-10-2019 - |
Frage
Ich habe Probleme, eine Kombination von zu verwenden XElement
und XslCompiledTransform
. Ich habe den Beispielcode, den ich unten verwende, eingestellt. Wenn ich meine Eingabe -XML mit dem bekomme GetXmlDocumentXml()
Methode, es funktioniert gut. Wenn ich das benutze GetXElementXml()
Methode stattdessen bekomme ich eine InvalidOperationException
Wenn Sie das anrufen Transform
Methode von XslComiledTransform
:
Token -Text im Start des Status würde zu einem ungültigen XML -Dokument führen. Stellen Sie sicher, dass die Konformanzevel -Einstellung auf Konformanzevel.Fragment oder konformancelevel.auto eingestellt ist, wenn Sie ein XML -Fragment schreiben möchten.
Das CreateNavigator
Methode auf beiden XElement
und XmlDocument
Gibt ein zurück XPathNavigator
. Was zusätzliche Sachen ist XmlDocument
Dies funktioniert alles und wie kann ich das Gleiche mit tun XElement
? Mache ich nur etwas Wahnsinniges?
static void Main(string[] args)
{
XslCompiledTransform stylesheet = GetStylesheet(); // not shown for brevity
IXPathNavigable input = this.GetXElementXml();
using (MemoryStream ms = this.TransformXml(input, stylesheet))
{
XmlReader xr = XmlReader.Create(ms);
xr.MoveToContent();
}
}
private MemoryStream TransformXml(
IXPathNavigable xml,
XslCompiledTransform stylesheet)
{
MemoryStream transformed = new MemoryStream();
XmlWriter writer = XmlWriter.Create(transformed);
stylesheet.Transform(xml, null, writer);
transformed.Position = 0;
return transformed;
}
private IXPathNavigable GetXElementXml()
{
var xml = new XElement("x", new XElement("y", "sds"));
return xml.CreateNavigator();
}
private IXPathNavigable GetXmlDocumentXml()
{
var xml = new XmlDocument();
xml.LoadXml("<x><y>sds</y></x>");
return xml.CreateNavigator();
}
Lösung
Oh, das war einfach. Die Lösung bestand darin, die zu wickeln XElement
in einem (n XDocument
Objekt. Problem gelöst!