关于改进以下XslCompiledTransform类用法的思考

时间:2012-09-14 16:20:28

标签: c# xml xslt

我非常感谢以下实施的输入。目标是:生成XElement,尽可能避免文件系统读/写。

private XElement ProduceApiXml(KeyValuePair<string, ConfigScriptOutput> kvp)
{
    XElement returnValue = null;
    // load xsl file
    XslCompiledTransform ct = new XslCompiledTransform();
    string xslFile = Path.Combine(_assemblyDir, ConfigurationManager.AppSettings["ConfigOutputXslFile"]);
    ct.Load(xslFile);
    XmlReader xmlToTransform = XmlReader.Create(new StringReader(kvp.Value.ScriptStdOut));
    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    XmlWriter xmlTransformed = new XmlTextWriter(sw);
    ct.Transform(xmlToTransform, xmlTransformed);

    returnValue = XElement.Parse(sb.ToString());
    return returnValue;
}

这是我第一次使用这个XslCompiledTransform类,我想我可以改进它。我真正关心的是我应该使用StringBuilder以外的东西 - &gt; StringWriter - &gt; XmlWriter构造到达我想要的位置?看起来像是为了完成手头的任务而构建的很多对象 - 这确实有效。现在,工作获胜,但我想让它变得更好。

我非常感谢那些有建设性地评论我在这里所做的经验的人。代码审查,如果你愿意的话?

提前感谢您的时间。

1 个答案:

答案 0 :(得分:2)

如果要填充XElement,请使用

XDocument result = new XDocument();
using (XmlWriter xw = result.CreateWriter())
{
  ct.Transform(xmlToTransform, xw);
}
returnValue = result.Root;

没有必要使用StringWriter而不需要使用遗留的XmlTextWriter,转换可以直接填充XContainer。

我还将XmlReader和StringReader的使用包装到using块中。