在第n次出现记号后插入字符串
本文关键字:插入 字符串 记号 在第 | 更新日期: 2023-09-27 18:15:21
我在字符串变量myHtml
中有以下HTML。myHTML
变量填充了来自某些函数的HTML,该函数返回以下HTML
string myHtml="<table> <tr id='12345'><td>Hello1</td></tr> <tr id='12346'><td>Hello2</td></tr> </table>";
在这个例子中,我返回的数据中有两行,我需要在上面的行之间添加另一行id=1234678
。那么myHtml
可能看起来像
myHtml="<table> <tr id='12345'><td>Hello1</td></tr> <tr id='1234678'><td>Hello New</td></tr> <tr id='12346'><td>Hello2</td></tr> </table>";
我想通过在字符串操作(如indexOf等)的帮助下附加HTML来做到这一点,但我不知道如何做到这一点
不要使用字符串,而是使用库。例如HTML敏捷性包
总是只有2行吗?如果是,这将工作:
string newRow = " <tr id='1234678'><td>Hello New</td></tr> ";
int i = myHtml.IndexOf("</tr>") + 5;
string newHtml = myHtml.Insert(i, newRow);
如果有任意数量的行,我们需要编写一个方法来查找要插入的特定索引。
例句:
int IndexOfNth(string source, string token, int nTh)
{
int index = source.IndexOf(token);
if (index != -1)
{
int i = 1;
while (i++ < nTh)
index = source.IndexOf(token, index + 1);
}
return index;
}
然后使用:
int i = IndexOfNth(myHtml, "</tr>", 1) + 5; // find first "</tr>" and insert after
// Or you could use
int i = IndexOfNth(myHtml, "<tr ", 2); // find second "<tr " and insert before
试试这个
myHtml = "<table> <tr id='12345'><td>Hello1</td></tr> <tr id='12346'><td>Hello2</td></tr> </table>";
int index1 = myHtml.IndexOf("<tr", 0);
int index2 = myHtml.IndexOf("<tr", index1 + 3); // 3 for amount of characters in '<tr'
myHtml = myHtml.Insert(index2, "<tr id='1234678'><td>Hello</td></tr>");
你也可以通过循环构建一个数组,这样你就可以在你喜欢的任何地方插入行,如果有两个以上的现有行
尝试使用Linq to XML。基于您的字符串创建XDocument。然后搜索您的tr节点并插入新的tr节点。
var newTR = new XElement("tr", new XAttribute("id", "1234678"), new XElement("td", "Hello3"));
TextReader tr = new StringReader(myHtml);
XDocument doc = XDocument.Load(tr);
doc.Decendants().Skip(1).AddAfterSelf(newTR);
var newStr = doc.ToString();