2016-06-14 3 views
2

У меня есть .txt-файл, и я хочу преобразовать его в .xml-файл с помощью C#. Текстовый файл выглядитКак преобразовать текстовый файл в XML

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

ВЫХОД:

<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

да, узел е должен быть Optimus

ответ

0

Если следующий символ после буквы - это косая черта, добавьте символ после косой черты внутри текущего тега. Otherwhise закрыть текущий тег.

Вы должны изучить массивы и индексировать.

Загрузка всего текстового файла в массив строк (одна строка = одна строка в массиве) возможна с помощью метода 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 вокруг результирующего массива и установите его в длину вашего массива, который вы создали, с новыми разделителями строк. Создайте еще один цикл для каждой строки, чтобы разбить символы и поместить их в стек.

При размещении символа в стеке напишите его в файл с помощью «<» + символ + «>». После того, как вы положили каждый символ стека, вам просто нужно, чтобы совать их и записать символ в файл «»

Split: 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

Смежные вопросы