Question

Je vais avoir quelques problèmes en utilisant une combinaison de XElement et XslCompiledTransform. J'ai mis le code échantillon j'utilise ci-dessous. Si je reçois mon XML d'entrée en utilisant la méthode GetXmlDocumentXml(), il fonctionne très bien. Si j'utilise plutôt la méthode de GetXElementXml(), je reçois un InvalidOperationException lorsque vous appelez la méthode Transform de XslComiledTransform:

Texte Jeton dans l'état de démarrage entraînerait un document XML non valide. Assurez-vous que le paramètre est réglé sur ConformanceLevel ConformanceLevel.Fragment ou ConformanceLevel.Auto si vous voulez écrire un fragment XML .

La méthode de CreateNavigator sur les deux retours de XElement et XmlDocument un XPathNavigator. Qu'est-ce que des choses supplémentaires est XmlDocument Ce faisant, tout cela fonctionne, et comment puis-je faire la même chose avec XElement? Est-ce que je fais juste fou quelque chose?

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();
}
Était-ce utile?

La solution

Oh, qui était facile. La solution consistait à envelopper le XElement dans un objet XDocument. résolu problème!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top