我正在尝试使用XslCompiledTransform,并将输出用作XPathDocument。
有什么想法吗?
发布于 2009-09-04 14:17:17
将转换发送到基于StringWriter的XmlTextWriter。然后通过从StringWriter检索XML字符串来实例化XPathDocument。
var sw = new StringWriter();
var xtw = new XmlTextWriter(sw);
myTransform.Transform(myXml, xtw);
var xpd = new XPathDocument(sw.ToString());它不是内存效率最高的机制,但足以满足大多数需求。一种类似的方法是使用MemoryStream而不是StringWriter,但相比较而言,这有点混乱。
发布于 2010-03-31 10:34:09
琼斯先生的回答对我很有帮助,但我发现最后一行不起作用。我最终这样做了:
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-31 10:45:41
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);
}
}
}https://stackoverflow.com/questions/1379475
复制相似问题