代码之家  ›  专栏  ›  技术社区  ›  Sangram Nandkhile Viktor Klang

用td和属性替换td标记

  •  1
  • Sangram Nandkhile Viktor Klang  · 技术社区  · 14 年前

    我的问题是在我的项目中发生的特殊情况。

    在我的HTML文档中, 我想 代替 <td> 具有 <td class=”right”> 对于除A中第一个以外的所有TDS <tr> 标签。(如果有 <TR & GT; 里面 <TR & GT; 然后标记,这也需要处理)。

    如果输入如下:

    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
    <tr>
    

    输出应类似于:

    <tr>
      <td>1</td>
      <td class=”right”>2</td>
      <td class=”right”>3</td>
    <tr>
    

    我试过了..这个代码..

    public static string tableFormat(string html)   // Add extra attribute to td
            {
                int start = 0, end = 0, trstart = 0, trend = 0;
               // html = CleanUpXHTML(html);  // clean unnecessary p tags
                while (html.Contains("<tr>"))
                {
                    //start=end;
                    trstart = html.IndexOf("<tr>", end);
                    if (trstart == -1)
                        break;
                    trend = html.IndexOf("</tr>", trstart);
                    start = html.IndexOf("<td>", trstart);
                    end = html.IndexOf("</td>", trend);
                    while (end < trend)
                    {
    
                        start = html.IndexOf("<td>", end);
                        html = html.Insert(start + 3, " class=\"right\"");
                        end = html.IndexOf("</td>", trstart);
    
                    }
                }
                return html;
            }
    
    4 回复  |  直到 8 年前
        1
  •  0
  •   Smack    14 年前

     public static string TableFormat(string xhtml)
        {
            int start = 0, end = 0, trstart = 0, trend = 0;
    
            while (trstart != -1)
            {
                //start=end;
                trstart = xhtml.IndexOf("<tr>", end);
                if (trstart == -1)
                    break;
                trend = xhtml.IndexOf("</tr>", trstart);
                start = xhtml.IndexOf("<td>", trstart);
                end = xhtml.IndexOf("</td>", start);
                while (end < trend)
                {
                    //int trackTr = 0;
                    start = xhtml.IndexOf("<td>", end);
                    if (start > trend)
                        break;
                    xhtml = xhtml.Insert(start + 3, " class=\"right\"");
    
                    end = xhtml.IndexOf("</td>", start);
    
                }
            }
            return (xhtml);
        }
    
        2
  •  0
  •   Mike Hofer    14 年前

        3
  •  0
  •   bobince    14 年前

    HTML Agility Pack

    HtmlDocument doc= new HtmlDocument();
    doc.LoadHtml(html);
    foreach (HtmlNode td in doc.DocumentElement.SelectNodes("//tr/td[position()>1]"]) {
        td.SetAttributeValue("class", "right");
    }
    
        4
  •  0
  •   Les    14 年前

            string pattern = @"(?<!(<tr>\s*))<td>";
            string test = @"<tr> 
                              <td>1</td> 
                              <td>2</td> 
                              <td>3</td> 
                            </tr> ";
            string result = Regex.Replace(test, pattern, "<td class=\"right\">", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            Console.WriteLine("{0}", result);