Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于改进以下XslCompiledTransform类使用的思考_C#_Xml_Xslt - Fatal编程技术网

C# 关于改进以下XslCompiledTransform类使用的思考

C# 关于改进以下XslCompiledTransform类使用的思考,c#,xml,xslt,C#,Xml,Xslt,我非常感谢您对以下实施的意见。目标是:生成XElement,尽可能避免文件系统读/写 private XElement ProduceApiXml(KeyValuePair<string, ConfigScriptOutput> kvp) { XElement returnValue = null; // load xsl file XslCompiledTransform ct = new XslCompiledTransform(); string

我非常感谢您对以下实施的意见。目标是:生成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;
}
private XElement ProduceApiXml(KeyValuePair kvp)
{
XElement returnValue=null;
//加载xsl文件
XslCompiledTransform ct=新的XslCompiledTransform();
字符串xslFile=Path.Combine(_assemblyDir,ConfigurationManager.AppSettings[“ConfigOutputXslFile”]);
ct.Load(xsl文件);
XmlReader xmlToTransform=XmlReader.Create(新的StringReader(kvp.Value.ScriptStdOut));
StringBuilder sb=新的StringBuilder();
StringWriter sw=新的StringWriter(sb);
XmlWriter xmlTransformed=新的XmlTextWriter(sw);
变换(xmlToTransform,xmlTransformed);
returnValue=XElement.Parse(sb.ToString());
返回值;
}
这是我第一次使用这个XslCompiledTransform类,我想我可以继续使用它。我真正关心的是,我是否应该使用StringBuilder->StringWriter->XmlWriter构造以外的其他构造来达到我想要的目的?似乎有很多东西都是为了完成手头的任务而建立起来的——这确实有效。现在,工作是成功的,但我想让它变得更好

我真的很感谢你们中有经验的人对我在这里所做的事情作出建设性的评论。如果您愿意的话,可以进行代码审查吗


提前感谢您的时间。

如果您想填充XElement,请使用

XDocument result = new XDocument();
using (XmlWriter xw = result.CreateWriter())
{
  ct.Transform(xmlToTransform, xw);
}
returnValue = result.Root;
不需要使用StringWriter,也不需要使用传统的XmlTextWriter,转换可以直接填充XContainer


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

我可以将其弹出到我们的代码审查站点,在那里您可能会得到更好的答案。如果这听起来不错,请@回复我或标记。