我试图使用XslCompiledTransform,并使用所述输出作为XPathDocument中。

任何想法?

有帮助吗?

解决方案

发送所述变换基于一个XmlTextWriter一个StringWriter。然后实例XPathDocument通过从StringWriter以便在检索的XML字符串。

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是已经从一个XmlReader初始化的XPathDocument中。)

大卫·安德森的回答稍微好一点的形式为以下:它不会从潜在的资源泄漏吃亏;否则是相同的。

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