1

我正在尝试使用 XslCompiledTransform,并将输出用作 XPathDocument。

有任何想法吗?

4

3 回答 3

3

琼斯先生的回答对我很有帮助,但我发现最后一行不起作用。我最终这样做了:

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

于 2010-03-31T02:34:08.853 回答
2

将转换发送到XmlTextWriter基于 a 的 a StringWriter。然后XPathDocument通过从StringWriter.

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

myTransform.Transform(myXml, xtw);

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

它不是内存效率最高的机制,但足以满足大多数需求。类似的方法是使用 aMemoryStream而不是 a,StringWriter但相比之下它有点混乱。

于 2009-09-04T14:17:16.693 回答
2

下面是大卫 M. 安德森的回答稍微好一点的形式:它不会遭受潜在的资源泄漏;否则是一样的。

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);
        }
    }
}
于 2010-03-31T02:45:40.590 回答