0

次の実装についてご意見をいただければ幸いです。目標は次のとおりです。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 -> StringWriter -> XmlWriter コンストラクト以外のものを使用する必要があるかということです。目の前のタスクを実行するために構築された多くのオブジェクトのように見えます-これは機能します。今は働くことが勝ちですが、もっと良くしたいです。

私がここで行ったことについて建設的なコメントをしてくださった経験のある方々に本当に感謝しています。コードレビューですか?

お時間をいただきありがとうございます。

4

1 に答える 1

2

XElement を設定する場合は、次を使用します

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

StringWriter を使用する必要はなく、従来の XmlTextWriter を使用する必要もありません。変換によって XContainer に直接入力できます。

また、XmlReader と StringReader の使用をusingブロックにラップします。

于 2012-09-14T16:34:04.710 に答える