Domanda

Sto avendo qualche problema utilizzando una combinazione di XElement e XslCompiledTransform. Ho messo il codice di esempio che sto usando qui di seguito. Se ottengo la mia XML di input utilizzando il metodo GetXmlDocumentXml(), funziona benissimo. Se uso il metodo GetXElementXml() invece, ottengo un InvalidOperationException quando si chiama il metodo di Transform XslComiledTransform:

Testo simbolici in stato di avvio si tradurrebbe in un documento XML non valido. Assicurarsi che l'impostazione è impostata su ConformanceLevel ConformanceLevel.Fragment o ConformanceLevel.Auto se si desidera scrivere un XML frammento .

Il metodo CreateNavigator su entrambi i XElement e XmlDocument restituisce un XPathNavigator. Che roba in più è XmlDocument così facendo questo tutte le opere, e come posso fare lo stesso con XElement? Sto solo facendo una cosa folle?

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();
}
È stato utile?

Soluzione

Oh, che era facile. La soluzione era quella di avvolgere il XElement in un oggetto XDocument. Problema risolto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top