2011-11-22 4 views
0

のn番目の発生後の文字列に挿入し、私持っている。この例ではトークン

string myHtml="<table> <tr id='12345'><td>Hello1</td></tr> <tr id='12346'><td>Hello2</td></tr> </table>"; 

を次のようにそこに、HTMLを返す変数myHtml【選択myHTML変数は、いくつかの機能からHTMLで満たされている文字列に次のHTML返されたデータに2行あり、上記の行の間に別の行をid=1234678と追加する必要があります。それではmyHtmlは、私は、このようななどのindexOf、として文字列操作の助けを借りてHTMLを追加することによって、それをやりたい

myHtml="<table> <tr id='12345'><td>Hello1</td></tr> <tr id='1234678'><td>Hello New</td></tr> <tr id='12346'><td>Hello2</td></tr> </table>"; 

のように見えるかもしれませんが、私はこれを行う方法を見つけ出すことはできません。

+0

私は受注でのtrタグを取得することではなく、無駄 – abbas

+0

使用したサブストリングでのindexOfで何かをやってみたかったです。文字列を分割して、内部に何かを加えてから結合します。私は正しい? – deadfish

+0

@asawyer、番号2のeh。ジェフ・アトウッドは70%が「かなり良い」と考えているので、おそらく67%はかなり良いと思う。http://blog.stackoverflow.com/2009/08/new-question-asker-features/ – dsolimano

答えて

1

いつも2行しかありませんか?そうであれば、これは動作します:

string newRow = " <tr id='1234678'><td>Hello New</td></tr> "; 
int i = myHtml.IndexOf("</tr>") + 5;    
string newHtml = myHtml.Insert(i, newRow); 

行数があれば、挿入する特定のインデックスを見つける方法を記述する必要があります。

例:

int IndexOfNth(string source, string token, int nTh) 
    { 
     int index = source.IndexOf(token); 

     if (index != -1) 
     { 
      int i = 1; 
      while (i++ < nTh) 
       index = source.IndexOf(token, index + 1); 
     } 

     return index; 
    } 

次にあなたが使用します。

int i = IndexOfNth(myHtml, "</tr>", 1) + 5; // find first "</tr>" and insert after 

// Or you could use 
int i = IndexOfNth(myHtml, "<tr ", 2); // find second "<tr " and insert before 
+0

特定のIDを持つ行の前に挿入したい...これは特定のIDのために動作します...無限の行がある可能性があります – abbas

+0

特定のIDの前に挿入するには、 'id = '12346'> ')' 'を使用することができます。これは、' 'IndexOfNth(myHtml、" "、1)'です。常に最初の出現である。 –

+0

ただし、HTMLが完全にフォーマットされていないと破損する可能性があるため、実際には注意が必要です。 (そのため、適切なHTML操作ライブラリを使用する必要があります)。 –

5

このためにライブラリではなく文字列を使用しないでください。たとえば、HTML agility pack

+0

私はライブラリを使用できません。 – abbas

+0

どうしてですか? HTMLアジリティパックは、あなたが望むものを達成するための最良の方法です。 –

+0

私は他に何かを見ることが許されていないので。 – abbas

1

あなたはどこに行を挿入することができますので、あなたはまた、ループを経由して、アレイを構築することができ、この

myHtml = "<table> <tr id='12345'><td>Hello1</td></tr> <tr id='12346'><td>Hello2</td></tr> </table>"; 
    int index1 = myHtml.IndexOf("<tr", 0); 
    int index2 = myHtml.IndexOf("<tr", index1 + 3); // 3 for amount of characters in '<tr' 
    myHtml = myHtml.Insert(index2, "<tr id='1234678'><td>Hello</td></tr>"); 

をお試しください既存の行が3つ以上ある場合は、好きです。

+0

3つは何ですか...もう少し説明していただけますか? – abbas

+0

のインデックスは、最初の括弧 "<"が現れる値を返します。我々は、3文字( " brpyne

1

Linq to XMLを試してみてください。あなたの文字列に基づいてXDocumentを作成します。次に、trノードを検索し、新しいtrノードを挿入します。

var newTR = new XElement("tr", new XAttribute("id", "1234678"), new XElement("td", "Hello3")); 
TextReader tr = new StringReader(myHtml); 
XDocument doc = XDocument.Load(tr); 
doc.Decendants().Skip(1).AddAfterSelf(newTR); 
var newStr = doc.ToString();