将xml示例更改为xmldocument
本文关键字:xmldocument xml | 更新日期: 2023-09-27 18:01:10
我有一个程序,它读取一个制表符分隔的文件并构建一个示例xml文件。
't't'troot
't't't'tnode1
输出:
<root><node1></node1></root>
我想更改程序的逻辑,以构建用于构建xmldocument的字符串表示,而不是用于自动化目的的c#构建xmldocument的xml。
例如(文件的实际文本(
"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);
我建议使用XmlWriter
-然后:
newXml += "<" + files[lines].Replace("'t", "") + ">" + System.Environment.NewLine;
成为
writer.WriteStartElement(files[lines].Replace("'t", "") );
和
newXml += "</" + stack.Pop() + ">" + System.Environment.NewLine;
成为
writer.WriteEndElement();
等等其中CCD_ 2是CCD_。请注意,通过这种方式,您不需要在堆栈中再保留开放元素的名称——编写器会为您这样做(您可以使用一个简单的计数器来跟踪有多少开放元素(。
一旦您的代码使用XmlWriter
,您就可以使用XmlNodeWriter
直接转到文件、任何流、字符串(请参阅此处(或XmlDocument
。
更新
要生成创建XmlDocument
的C#代码,"优雅"(但可能过于夸张(的解决方案是实现一个生成代码文本的自定义XmlWriter
。XmlNodeWriter
的源代码将是一个很好的起点。
否则,只需将当前代码的字符串连接替换为包含C#代码的类似字符串。。。