2011-11-14 5 views
2

背景情報: 私は定期的に(LINQを使用して)XML文書から単一の文字列にカプセル化したテキストを大量に持っています。この文字列には、出力目的で保存する必要があるHTMLがたくさん含まれていますが、この文字列で時々発生する電子メールと個別のHTMLリンクを削除する必要があります。問題のあるテキストの例は次のようになります。LINQまたはC#を使用して文字列から特定のHTMLをサニタイズするアルゴリズム

--<a href="mailto:[email protected]" target="_blank">John Smith</a> from <a href="http://www.agenericwebsite.com" target="_blank">Romanesque Architecture</a></p> 

私が行うことができるように必要なものです:

  1. 次の文字列を検索します。<a href
  2. は、その文字列とそれに続くすべての文字を削除します。 >
  3. また、文字列によって、常にこの文字列を削除</a>

これを簡単に行うことができるLINQの方法はありますか、これを実現するには.NETの文字列操作を使用してアルゴリズムを作成する必要がありますか?

+2

HTML敏捷性パックを –

+1

なぜあなたはLINQを使いたいのですか?これは正規表現/文字列の操作がはるかに単純になるように見えます –

+0

+1 @AustinSalonen HTMLの処理に関する質問に対する唯一の答えです! HTMLと正規表現は起こるのを待っている事故です。そして、私は正規表現が好きです:) – Goran

答えて

2

おそらくLINQでこれを行うことができますが、通常の古いREGEXのように聞こえるかもしれません。

this questionのように聞こえ、特にthis answerのように聞こえます。

+0

ああ、正規表現。私は恐れていた。残念なことに、私はそれを使ったことはありませんが、今は学ぶ良い時です。今、私はRegexが文字列内の部分文字列とパターンを識別するのに役立つことを理解していますが、私があなたが提供したリンクのテクニックを適用すると、私のメールとHTMLリンクの大部分の終わりの区切り文字はどのようにして返されますか>私のテキストの他の場所に頻繁に現れる?途中で助けてくれてありがとう。 –

+0

@Robert - ありがとう。 –

+0

@full - わかりません。答えのテクニックを使って、

1

あなたは正確にLinqToXml経由でこれを実行したい場合は、この再帰関数のような何かしてみてください:

static void ReplaceNodesWithContent(XElement element, string targetElementname) 
    { 
     if (element.Name == targetElementname) 
     { 
      element.ReplaceWith(element.Value); 
      return; 
     } 

     foreach (var child in element.Elements()) 
     { 
      ReplaceNodesWithContent(child, targetElementname); 
     } 
    } 

使用例:

static void Main(string[] args) 
    { 
     string xml = @"<root> 
<items> 
    <item> 
     <a>inner</a> 
    </item> 
    <item> 
     <subitem> 
      <a>another one</a> 
     </subitem> 
    </item> 
</items> 

「;

 XElement x = XElement.Parse(xml); 

     ReplaceNodesWithContent(x, "a"); 

     string res = x.ToString(); 
     //   res == @"<root> 
     //      <items> 
     //      <item>inner</item> 
     //      <item> 
     //       <subitem>another one</subitem> 
     //      </item> 
     //      </items> 
     //     </root>" 
    } 
+0

ええ、私は間違いなくあなたがこれで行くところを見ることができます。入力をありがとう、おそらく、この機会をRegexを学ぶために取るだろう。 –

関連する問題