2016-06-14 44 views
2

我有一個.txt文件,我想用c#將它轉換成.xml文件。 txt文件看起來像如何將文本文件轉換爲XML

a/b/c 
a/b 
a/b/c/d 
e 

OUTPUT:

<root> 
<a> 
    <b> 
    <c> 
     <d></d> 
    </c> 
    </b> 
<a> 
<a> 
    <b> 
    <c></c> 
</b> 
</a> 
<a> 
    <b></b> 
</a> 
<e> 
</root> 

可以指示?

+0

你嘗試過什麼?訂單怎麼樣? XML和源數據的排序是不同的。爲什麼?這個訂單是如何派生的? – spender

+0

''是無效的XML - 它應該是''或'' – fubo

+0

是,節點E應爲 Optimus

回答

0

如果字母后的下一個字符是斜線,則在當前標籤內部的斜槓後面加上字符。另外關閉當前標籤。

你應該學習數組和索引。

使用File.ReadAllLines方法可以將整個文本文件加載到字符串數組中(一行=數組中的一個字符串)。

1

忽略我上面的評論強調了排序問題,這裏的(樂趣)一個襯墊:

XDocument doc = new XDocument(
    new XElement("root", 
       Regex 
        .Split(input, @"\r?\n") 
        .Select(line => line.Split('/') 
            .Reverse() 
            .Aggregate((XElement)null, 
               (prev,curr) => 
                new XElement(curr, prev))))); 

則... How can I save the XML contents of an XDocument as an .xml file?

0

我只是忽視的事實是順序的XML文件不符合你的txt文件的順序。 T爲你的文件寫一個解析器,你必須用新的行符號(Environment.NewLine或「\ n」)和「/」來分割你的字符串,然後把這些字母放在一個堆棧中,並將它們寫入你的需要一次封裝一個。

在結果數組周圍放置一個while循環並將其設置爲您使用新行分割創建的數組長度。爲每一行創建另一個循環來分割符號並將它們放在堆棧中。

將符號放在堆棧上時,用「<」+符號+「>」將其寫入文件。你已經把堆棧的每一個符號後,你只需要戳破這些符號寫入文件「」

斯普利特:C# Split A String By Another String

也許當我有時間的話,我就寫一些代碼,但是這應該給你一個大概的想法。

3

我認爲解決這個最簡單的方法是一個遞歸方法

方法:

public static string GetXML(IEnumerable<string> Items) 
{ 
    if (Items.Any()) 
    { 
     return string.Format("<{0}>{1}</{0}>", Items.First(), GetXML(Items.Skip(1))); 
    } 
    else 
    { 
     return string.Empty; 
    } 
} 

電話:

StringBuilder sbResult = new StringBuilder("<root>"); 
foreach (string Line in File.ReadAllLines(@"d:\sample.txt")) 
{ 
    sbResult.Append(GetXML(Line.Split('/'))); 
} 
sbResult.Append("</root>"); 
+0

非常感謝你,我試過這種方式 – Optimus

+0

@Optimus不客氣 – fubo