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();
}
War es hilfreich?

Lösung

Oh, das war einfach. Die Lösung bestand darin, die zu wickeln XElement in einem (n XDocument Objekt. Problem gelöst!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top