Problem with XElement and XslCompiledTransform

Posted by Graham Clark on Stack Overflow See other posts from Stack Overflow or by Graham Clark
Published on 2010-06-08T14:48:42Z Indexed on 2010/06/08 14:52 UTC
Read the original article Hit count: 586

I'm having some trouble using a combination of XElement and XslCompiledTransform. I've put the sample code I'm using below. If I get my input XML using the GetXmlDocumentXml() method, it works fine. If I use the GetXElementXml() method instead, I get an InvalidOperationException when calling the Transform method of XslComiledTransform:

Token Text in state Start would result in an invalid XML document. Make sure that the ConformanceLevel setting is set to ConformanceLevel.Fragment or ConformanceLevel.Auto if you want to write an XML fragment.

The CreateNavigator method on both XElement and XmlDocument returns an XPathNavigator. What extra stuff is XmlDocument doing so this all works, and how can I do the same with XElement? Am I just doing something insane?

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

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET