2017-01-26 2 views
1

У меня есть документ с кусками XML-данных, но между каждым куском есть обычный текст. Как извлечь только данные XML?Сплит текстовый файл в XML

т.е.

blah blah blah 
===: text text text :=== 
<?xml version="1.0" ?> 
    <Data> 
     <Line>information</Line> 
     <Line2>more information</Line2> 
    </Data> 
===: text text text :=== 
blah blah blah 
blah blah blah 
===: text text text :=== 
    <?xml version="1.0" ?> 
    <Data> 
     <Line>2nd information</Line> 
     <Line2>more information</Line2> 
    </Data> 
===: text text text :=== 
blah blah blah 

текст жгутов ===:: === всегда будет отличаться, но не должны быть включены.

+1

быть гораздо более конкретную информацию о тех, кто '===: текст текст текст: ===' линии, они буквальным и всегда присутствует в том, что точно такой же путь? –

+0

Каждый раз будет отличаться, у разделителя есть отметка времени и куча другой информации. – frebbie

+0

Еще немного информации. Может ли файл начинаться с XML или всегда будет строка '===: ...: ===' до первого xml? –

ответ

1

Этот раздел будет разбит ваш файл по любой строке, которая соответствует (line.StartsWith("===:") && line.EndsWith(":===")).

var fs = File.OpenText("file.xml"); 
var partitions = new List<string>(); 
var sb = new StringBuilder(); 
string line; 
while ((line = fs.ReadLine()) != null) 
{ 
    if (line.StartsWith("===:") && line.EndsWith(":===")) 
    { 
     if(sb.Length > 0) 
      partitions.Add(sb.ToString()); 
     continue; 
    } 

    sb.AppendLine(line); 
} 
if(sb.Length > 0) 
    partitions.Add(sb.ToString()); 

Этот номер создает раздел до тех пор, пока он не столкнется с разделительной линией, а затем запустит другой раздел.

+0

Каждый раз будет отличаться, у разделителя есть отметка времени и куча другой информации. – frebbie

+1

Добавьте это к вопросу. Таким образом, вы теряете время и добрую волю. –

+0

@HenkHolterman Сделали сейчас. Не опытный вопрос, задающий вопрос здесь soz – frebbie

-1

Если вы хотите сохранить отступы попробовать этот

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 



namespace ConsoleApplication43 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      string xml = ""; 
      string inputline = ""; 
      StreamReader reader = new StreamReader(FILENAME); 
      while ((inputline = reader.ReadLine()) != null) 
      { 
       if (inputline.Trim().StartsWith("<")) 
       { 
        xml += inputline + "\n"; 
       } 
      } 

     } 
    } 

} 
+0

Не каждая строка xml начинается с тега. –

+0

Затем отправьте тестовые данные, которые фактически представляют ваш вход. – jdweng

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