タブ区切りファイルを読み取り、サンプルxmlファイルを作成するプログラムがあります。
\t\t\troot
\t\t\t\tnode1
出力:
<root><node1></node1></root>
プログラムのロジックを変更して、自動化の目的でxmldocumentを構築するc#のxmlではなくxmldocumentを構築する文字列表現を構築したいと思います。
たとえば(ドキュメントの実際のテキスト)
"XmlElement XElemRoot = xDoc.CreateElement("root");
XmlElement XElemSecond = xDoc.CreateElement("node1");
XElemRoot.AppendChild(XElemSecond);"
現在のコード:
string[] files = System.IO.File.ReadAllLines(@"C:\dell\test\xmlsamplemaker\xmlsampler\xmlsampler\bin\Debug\textofxml.txt");
string newXml = string.Empty;string[] xmlHolder;
List<int> levels = new List<int>();
var lastlevel = 0;
Stack<String> stack = new Stack<String>();
for (int lines = 0; lines < files.Length; lines++) //start
{
var firstNode = files[lines].TrimEnd('\t');
levels.Add(TextTool.CountStringOccurrences(firstNode, "\t")); //first count
if (lines == 0)
{
newXml += "<" + files[lines].Replace("\t", "") + ">" + System.Environment.NewLine;
stack.Push(files[lines].Replace("\t", ""));
}
else{
if (levels[levels.Count - 1] == levels[levels.Count - 2])
{
newXml += "</" + stack.Pop() + ">" + System.Environment.NewLine;
newXml += "<" + files[lines].Replace("\t", "") + ">" +System.Environment.NewLine;
stack.Push(files[lines].Replace("\t", ""));
}
else if (levels[levels.Count - 1] > levels[levels.Count - 2])
{
newXml += "<" + files[lines].Replace("\t", "") + ">" + System.Environment.NewLine;
stack.Push(files[lines].Replace("\t", ""));
}
else
{
newXml += "</" + stack.Pop() + ">" + System.Environment.NewLine;
newXml += "</" + stack.Pop() + ">" + System.Environment.NewLine;
newXml += "<" + files[lines].Replace("\t", "") + ">" + System.Environment.NewLine;
stack.Push(files[lines].Replace("\t", ""));
}
}
}
var size = stack.Count;
for (int j = 0; j < size; j++)
{
newXml += "</" + stack.Pop() + ">" + System.Environment.NewLine;
}
System.IO.File.WriteAllText(@"C:\dell\xmlsample.xml", newXml);