إخراج XSLcompileDtransform كـ XPathDocument
-
21-09-2019 - |
سؤال
أحاول استخدام XSLCompileDTransform ، واستخدام الإخراج كـ XPathDocument.
أيه أفكار؟
المحلول
أرسل التحويل إلى XmlTextWriter
استنادا إلى أ StringWriter
. ثم مثيل XPathDocument
عن طريق إعادة تعزيز سلسلة XML من StringWriter
.
var sw = new StringWriter();
var xtw = new XmlTextWriter(sw);
myTransform.Transform(myXml, xtw);
var xpd = new XPathDocument(sw.ToString());
إنها ليست الآلية الأكثر كفاءة في الذاكرة ولكنها ستكون كافية لمعظم الاحتياجات. طريقة مماثلة سيكون استخدام أ MemoryStream
بدل من StringWriter
ولكن فوضوي قليلا بالمقارنة.
نصائح أخرى
كانت إجابة السيد جونز مفيدة للغاية بالنسبة لي ، لكنني وجدت أن السطر الأخير لم ينجح. انتهى بي الأمر القيام بذلك:
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);
(هنا ، XPathdoc عبارة عن حجة Xpathdocence التي تم تهيئتها بالفعل من XmlReader.)
يوجد أدناه شكل أفضل قليلاً من إجابة David M. Anderson: لا يعاني من تسرب الموارد المحتملة ؛ وإلا هو نفسه.
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);
}
}
}
لا تنتمي إلى StackOverflow