使用C#重新排序字符串中的html元素

时间:2016-01-15 01:00:10

标签: c# html .net

我有一串html从服务中返回。我需要更新这个html服务器端(使用.Net)并在将其发送到客户端之前重新排序一些元素。举个简单的例子就说我有一个像下面这样的html字符串。如果字符串是如下表格。如何操纵它以将姓氏<th><td>放入其自己的<tr>。 html会更大,更复杂,但对于其中的一部分,下面说明了我需要如何更改它。由于实际HTML的复杂性,仅使用字符串替换效果不佳。

初始字符串

   "<table>
     <tbody>
      <tr>
        <th>First name</th>
        <td>some first name</td>
        <th>Last name</th>
        <td>some last name</td>
      </tr>
      <tr>
        <th>blah</td>
        <td>blah blah</td>
      </tr>
     </tbody>
    </table>
    "

修改后

   "<table>
     <tbody>
      <tr>
        <th>First name</th>
        <td>some first name</td>
      </tr>
        <th>Last name</th>
        <td>some last name</td>
      <tr>
        <th>blah</td>
        <td>blah blah</td>
      </tr>
     </tbody>
    </table>
    "

3 个答案:

答案 0 :(得分:1)

我知道URL答案是不受欢迎的,但您应该查看HTML Agility Pack。它专为此类事物而设计。

http://html-agility-pack.net/?z=codeplex

答案 1 :(得分:0)

一种非常简单的方法可能是......

var result = htmlString.Replace("<th>Last name</th>", "</tr><tr><th>Last name</th>");

如果您需要比此更复杂的内容,则需要在问题中添加更多详细信息。

答案 2 :(得分:0)

出于本答案的目的,我将愚蠢地假设您已在字符串列表中读取该文件。让我们将此列表命名为HTMLLines。然后以下应该做你想要的

int length=HTMLLines.Count;
for(int loop=0;loop<length;loop++)
{
     if(HTMLLines[loop].Equals("<th>Last name</th>"))
     {
          HTMLLines[loop]="</tr>\n<tr>\n"+HTMLLines[loop];
          //break;//If there is only one occurrence, remove the leading // else keep that to repeat for each occurence
     }
}

如果在此循环后保存列表,则应具有所需的输出。

此代码假定列表中没有空值。如果有任何空值,则应将HTMLLines[loop].Equals("<th>Last name</th>")替换为HTMLLines[loop]=="<th>Last name</th>"

如果"<th>Last name</th>"只是您用于此问题的一个样本,不能用于完全匹配,那么您应该将所有可能的匹配放在一个数组中,并检查每个循环。在这种情况下,如果我们将数组命名为theHeaders,则代码将类似于:

int length=HTMLLines.Count;
for(int loop=0;loop<length;loop++)
{
     for(int loop1=0;loop1<theHeaders.Length;loop1++)
     {
         if(HTMLLines[loop].Equals(theHeaders[loop1]))
         {
              HTMLLines[loop]="</tr>\n<tr>\n"+HTMLLines[loop];
              break;
         }
    }
}

我希望这有助于指出正确的方向。