将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);

将xml示例更改为xmldocument

我建议使用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#代码,"优雅"(但可能过于夸张(的解决方案是实现一个生成代码文本的自定义XmlWriterXmlNodeWriter的源代码将是一个很好的起点。

否则,只需将当前代码的字符串连接替换为包含C#代码的类似字符串。。。