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 

withingテキスト===:===常に異なるものになりますが、含める必要はありません。

+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

関連する問題