2012-02-24 10 views
1

私はこれをほぼ一日の間処理しています。しかし、私は、タブをすべての改行を取ることができないんだけど、キャリッジリターンから「>」と「<」2つのタグの間で改行、タブ、改行をすべて取り出すのに問題があります

これは私が読んでいるサンプルXMLファイルです:

   <Consequence_Note> 
        <Text>In some cases, integer coercion errors can lead to exploitable buffer 
         overflow conditions, resulting in the execution of arbitrary 
         code.</Text> 
       </Consequence_Note> 

、これを

<Consequence_Scope>Availability</Consequence_Scope> 
        <Consequence_Technical_Impact>DoS: resource consumption 
         (CPU)</Consequence_Technical_Impact> 

私の目標は、すべての改行、タブ、およびこれら二つのタグ(>と<)からキャリッジリターンを取ることです。私が達成できる唯一のことは、2つのタグの間に何もないときには、 "/"から "/ n/t/r"と "<"をすべて取り除くことです。しかし、2つのタグの間に他の文字がある場合は、\ n \ t \ rをすべて取り出すことができません。

私は例えば「>」からすべての改行を取るだろう正規表現を持っている方には、ヘルプ、タグ、およびキャリッジリターンを必要とし、「<」

   <Consequence_Technical_Impact>DoS: resource consumption 
        (CPU)</Consequence_Technical_Impact> 

何私が持っていると思います:

<Consequence_Technical_Impact>DoS: resource consumption (CPU)</Consequence_Technical_Impact> 

これは私のコード(私はxmlファイルから読んでいる)である:

String file = @"C:\Documents and Settings\YYC\Desktop\cwec_v2.1\cwec_v2.1.xml"; 
var lines = File.ReadAllText(file); 
var replace = Regex.Replace(lines, @">([\r\n\t])*?<", "><"); 
File.WriteAllText(file, replace); 
+5

XMLパーサーを使用する必要があります。 – SLaks

+0

@SLaks XMLパーサーを使用したいと思います。私が読んでいるXMLは非常に巨大なファイルであり、このXMLファイルの形式は3か月に1回変更されます。だからそれを解析するのは良い考えではありません。 – yyc2001

+2

違いはありません。 LINQ to XMLを使用すると、任意の形式を簡単に処理でき、正規表現よりもはるかに簡単で信頼性が向上します。確かに; – SLaks

答えて

1

html/xmlをregexp(RegEx match open tags except XHTML self-contained tags)で解析しないでください!

xmlにはXMLリーダー、htmlにはHtmlAgilityPack(または他のhtmlツール)を使用します。

xml/html文書は非常に複雑ですが、正規表現は必ずしもそうではありません(いくつかのケースでは一般的ではありませんが)。

+0

私は、新しいxml-parsing-with-regex-evil-destroyerの大群を歓迎します。 – sweaver2112

0

XmlReaderを使用してドキュメントを最初に読み込むと、デフォルトで入力から改行が削除されます。ライターの正しい設定で簡単に書き戻すことができます。

参照:http://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.ignorewhitespace.aspx 参照:http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx

正規表現の代替が、おそらく構築することができますが、それはまだ難しいXMLを開始するために解析するために作るたくさんとのCData、コメントや他の構築物を含むXMLの問題の多くを持っていますと。 XMLが非常に構造化されており、マシンが生成され、変更されていない場合は、正規表現を作成して修正することができますが、その一方で、ジェネレータを修正することもできます。働くかもしれない最も単純な正規表現:

\s{2,} 

長い1文字以上であり、1つのスペースに置き換え空白を取り除き

[ ] 

と交換してください。タグ内の他の空白を別に扱う必要はありません。それはXMLReaderがデフォルトで何をすべきかです。

関連する問題