2017-05-24 6 views
0

次の連続するタグが最初のタグと同じ場合、どのようにタグをマージしますか?HTMLのマージノード

私はHTMLでこのタグを持っている

<p>This is a text<b>Focus on the Family Great Stories collection</b><b>—</b> This is a textagain <b>bold</b></p> 

これは出力

<p>This is a text<b>Focus on the Family Great Stories collection—</b> This is a textagain <b>bold</b></p> 

する必要があり、私は私のコードで何をする必要がありますどのようにこのコード

がありますか?

  HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml(html); 

      foreach (var item in doc.DocumentNode.Descendants("p").ToList()) 
      { 
       if (item.HasChildNodes) 
       { 

        foreach (var ch in item.ChildNodes) 
        { 
         if (ch.Name != "#text") 
         { 
          Console.WriteLine(ch.Name); 
         } 
        } 
       } 
      } 

答えて

1

これはあなたにこれを行うにはどのようなアイデア与える: あなたはノード名でグループに必要とし、その結果を反復処理します。その後、元のdocに追加するだけです。

 HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml("<p><b>Focus on the Family Great Stories collection</b><b>—</b></p>"); 

     foreach (var item in doc.DocumentNode.Descendants("p").ToList()) 
     { 
      if (item.HasChildNodes) 
      { 
       var grouped = item.ChildNodes.GroupBy(_ => _.Name); 
       HtmlNode newNode = doc.CreateElement(grouped.FirstOrDefault().Key); 
       foreach (var bNode in grouped.FirstOrDefault()) 
       { 
        newNode.InnerHtml += bNode.InnerText; 
       } 
       item.InnerHtml = newNode.OuterHtml; 
      } 
     } 
+0

私はグループ化も試みましたが、Pタグに別のタグが含まれていると問題があります。例タグ

これはテキストですファミリーに焦点を当てた大物コレクション-これはテキストです。太字

です。だから私は今、タグの名前を取得し、それを次のタグと比較することをやっています。テキストをマージします。しかし、私の問題は、どうすれば正しい位置に挿入することができますか? –

+0

これはおそらく次のように動作します: 'while(node.nextSibling.Name ===" b ")//現在のノードにマージする' –

+0

どこに置いたらいいですか?ありがとうございました –

関連する問題