XslCompiledTransform Ausgabe als XPathDocument
-
21-09-2019 - |
Frage
Ich versuche, eine XslCompiledTransform zu verwenden, und verwenden Sie die Ausgabe als XPathDocument.
Irgendwelche Ideen?
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);
}
}
}