我有如下的文本文件:INI類型的純文本文件到XML在C#
root_node1_node2_node3=value
root_node1_node2_node3=value
root_node1_node2_node3_node4=value
root_node5_node6=value
我希望得到什麼:
<root>
<node1>
<node2>
<node3>value</node3>
<node3>value</node3>
<node3>
<node4>value</node4>
</node3>
</node2>
</node1>
<node5>
<node6>value</node6>
</node5>
</root>
所以我想轉換不同長度的線條到XML節點,然後將它們合併到C#中的單個XML文件中。
我閱讀了關於LINQtoXML的內容,但我還是對它有所瞭解。
請幫忙。
這就是我現在所在:
// file
string fileName = Path.GetFileName(file);
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
string fileSourceDirectory = Path.GetDirectoryName(file);
// xml
XDocument xDoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
// root
new XElement(fileNameWithoutExtension)
);
try
{
using(StreamReader sr = new StreamReader(file))
{
string line;
// go line-by-line
while((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
// element=value -> [element, value]
string[] elementAndValue = line.Split('=');
// elment_element_element -> [element, elelement, element]
string[] elements = elementAndValue[0].Split('_');
// value
string value = elementAndValue[1];
List<XElement> elementList = new List<XElement>();
for(int i = 0; i < elements.Length; i++)
{
if(i == (elements.Length - 1))
{
elementList.Add(new XElement(elements[i], value));
Console.WriteLine("Added: " + elements[i] + "=" + value);
}
else
{
elementList.Add(new XElement(elements[i]));
Console.WriteLine("Added: " + elements[i]);
}
}
xDoc.Root.Add(elementList[0]);
Console.WriteLine("Added first item to root.");
for(int i = 0; i < elementList.Count - 1; i++)
{
elementList[i].Add(elementList[i + 1]);
Console.WriteLine("Added " + elementList[i + 1] + " to " + elementList[i]);
}
}
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
// save xml
xDoc.Save(outputDir + "\\" + fileNameWithoutExtension + ".xml");
這做的第一部分是我想要的。
輸出是現在這樣的:
<root>
<node1>
<node2>
<node3>value</node3>
</node2>
</node1>
<node1>
<node2>
<node3>value</node3>
</node2>
</node1>
<node1>
<node2>
<node3>
<node4>value</node4>
</node3>
</node2>
</node1>
<node5>
<node6>value</node6>
</node5>
</root>
現在我想這些節點合併,這是我介紹的第一個地方的格式。
謝謝你的幫助。 :)
請不同的測試用例正確的測試代碼,如果需要的話請 –