Frage

Ich versuche, eine XslCompiledTransform zu verwenden, und verwenden Sie die Ausgabe als XPathDocument.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Senden die zu einem XmlTextWriter Transformation auf einem StringWriter basiert. Dann Beispiel der XPathDocument von retreiving den XML-String aus dem StringWriter.

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

myTransform.Transform(myXml, xtw);

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

Es ist nicht die meisten Speicher effizienten Mechanismus wird aber für die meisten Bedürfnisse ausreichend. Ein ähnlicher Ansatz wäre, eine MemoryStream anstelle eines StringWriter aber es ist ein wenig chaotisch im Vergleich.

Andere Tipps

Mr. Jones Antwort war sehr hilfreich für mich, aber ich fand, dass die letzte Zeile nicht funktioniert hat. Ich beendete das oben tun:

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

(Hier xPathDoc ist ein XPathDocument, die bereits von einem XmlReader initialisiert wird.)

Eine etwas bessere Form von David M. Anderson Antwort ist unten: es leidet nicht an potenziellen Ressourcenlecks; sonst ist es das gleiche.

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);
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top