Domanda

Sto cercando di usare un XslCompiledTransform, e utilizzare l'uscita come un XPathDocument.

Tutte le idee?

È stato utile?

Soluzione

Invia la trasformazione a un XmlTextWriter sulla base di un StringWriter. Poi esempio il XPathDocument dal retreiving la stringa XML dal StringWriter.

var sw = new StringWriter();
var xtw = new XmlTextWriter(sw);

myTransform.Transform(myXml, xtw);

var xpd = new XPathDocument(sw.ToString());

La sua non è la memoria meccanismo più efficiente, ma sarà sufficiente per la maggior parte delle esigenze. Un approccio simile sarebbe utilizzare una MemoryStream invece di una StringWriter ma è un po 'disordinato, al confronto.

Altri suggerimenti

Mr. La risposta di Jones è stato molto utile per me, ma ho trovato che l'ultima linea non ha funzionato. Ho finito per fare questo:

XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(filePath);
StringWriter stringWriter = new StringWriter();
XmlWriter xmlWriter = XmlTextWriter.Create(stringWriter);
xsl.Transform(xPathDoc, xmlWriter);
String newXml = stringWriter.ToString();
StringReader stringReader = new StringReader(newXml);
xPathDoc = new XPathDocument(stringReader);

(Qui, xPathDoc è un XPathDocument che è già stato inizializzato da un XmlReader.)

Un po 'meglio sotto forma di risposta di David M. Anderson è qui sotto: non soffre da potenziali perdite di risorse; altrimenti è lo stesso.

private static XPathDocument TransformToXPathDocument(string styleSheetPath,
                                                      IXPathNavigable xPathDoc)
{
    var xsl = new XslCompiledTransform();
    xsl.Load(styleSheetPath);
    using(var stringWriter = new StringWriter())
    {
        using(XmlWriter xmlWriter = XmlWriter.Create(stringWriter))
        {
            xsl.Transform(xPathDoc, xmlWriter);
        }
        using(var reader = new StringReader(stringWriter.ToString()))
        {
            return new XPathDocument(reader);
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top