Вопрос

Я пытаюсь использовать 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 - это XPathDocument, который уже был инициализирован из XmlReader.)

Немного лучшая форма Дэвида М.Ответ Андерсона приведен ниже:он не страдает от потенциальных утечек ресурсов;в остальном это то же самое.

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);
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top