我有一串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>
"
答案 0 :(得分:1)
我知道URL答案是不受欢迎的,但您应该查看HTML Agility Pack。它专为此类事物而设计。
答案 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;
}
}
}
我希望这有助于指出正确的方向。