2011-02-24 62 views
0

我有一個格式爲[文本] [文本] [文本] [文本] [文本]的字符串,我想將其轉換爲XML語法。我的代碼如下,但我想知道如何/如何改進它,你會以不同的方式做到這一點?將字符串[文本] [文本] [文本] [文本] [文本]轉換爲XML的最佳方式?

TextReader tr = new StreamReader(@"C:\values.txt"); 
    string message = tr.ReadToEnd().Trim().Replace("][", "|").Replace("[", "").Replace("]", ""); 
    tr.Close();    
    string[] nodeStart = { "<firstNode>", "<secondNode>", "<thirdNode>", "<fourthNode>", "<fifthNode>" }; 
    string[] nodeEnd = { "</firstNode>", "</secondNode>", "</thirdNode>", "</fourthNode>", "</fifthNode>" }; 
    string[] messageArr = message.Split('|'); 

    StringBuilder sb = new StringBuilder(); 
    sb.AppendLine("<rootNode>"); 
    for(int i = 0; i < messageArr.Length; i++) 
    { 
     sb.AppendLine(String.Format("{0}{1}{2}", nodeStart[i], messageArr[i], nodeEnd[i])); 
    } 
    sb.AppendLine("</rootNode>"); 
    Console.WriteLine(sb); 
    Console.ReadLine(); 

輸出/的XML的格式預先被簡化此示例 感謝。

+2

使用'System.Xml.XmlWriter' http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx – Bazzz 2011-02-24 13:21:39

+1

我很困惑,爲什麼你需要每個命名如果它們是相同類型的項目,那麼它們在你的root節點中是不同的? – 2011-02-24 13:25:16

+0

對不起,它不是同一類型的項目,[文本]可能是名字姓氏,城市,國家或任何其他 – Nick 2011-02-24 13:30:10

回答

1

在LINQ(有依賴於.NET 4或Silverlight 4因爲Zip):

string[] elementNames = new string[] { "first", "second", "third", "forth", "fifth" }; 
string input = "[text][text][text][text][text]"; 

XElement[] elements = input 
    .Substring(1, input.Length - 1) 
    .Split("][") 
    .Zip(elementNames, (value, element) => new XElement(element, value)) 
    .ToArray(); 

XDocument document = new XDocument(
    new XElement("Root", elements) 
); 

string xml = document.ToString();