使用 C# 对字符串中的 html 元素重新排序
本文关键字:新排序 排序 元素 html 字符串 使用 | 更新日期: 2023-09-27 18:30:24
>我有一个从服务返回的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>
"
我知道URL答案是不受欢迎的,但你应该看看HTML敏捷包。它是为这种事情而设计的。
http://html-agility-pack.net/?z=codeplex
出于这个答案的目的,我将做出一个愚蠢的假设,即您已经阅读了字符串列表中的文件。让我们将此列表命名为 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;
}
}
}
我希望这有助于为您指明正确的方向。
一个非常简单的方法可能是...
var result = htmlString.Replace("<th>Last name</th>", "</tr><tr><th>Last name</th>");
如果您需要比这更复杂的内容,则需要为您的问题添加更多详细信息。