我有一个字符串:
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
我从数据库中已经取出一个DataSet 有6条记录.比如 记录1,记录2,记录3,记录4,记录5,记录6
将AAA替换成这些记录..我该怎么做.?????
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
我从数据库中已经取出一个DataSet 有6条记录.比如 记录1,记录2,记录3,记录4,记录5,记录6
将AAA替换成这些记录..我该怎么做.?????
string s = <tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>MatchCollection ms = Regex.Matches(s,正则,RegexOptions.IgnoreCase);
for(int i=0;i<ms.Count;i++)
{
s=s.Replace(ms[i].Value,ds.Tables[0].Rows[i][0].ToString());
}
但这样的结果是,所有的AAA都变成了 记录1 ..
请问该怎么解决这个问题
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript" for=window event=onload>
<!--
var datas=Array("记录1","记录2","记录3","记录4","记录5","记录6");
var dataElement=document.getElementById("datas");
var childrens=dataElement.children;
var mm=0;
for(var i=0;i<childrens.length;i++){
var tdValue=childrens[i].children;
for(var k=0;k<tdValue.length;k++){
tdValue[k].innerText=datas[mm];
mm++;
}
}
//-->
</SCRIPT>
</HEAD><BODY>
<table>
<tbody id="datas">
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
<tr>
<td>AAA</td>
<td>AAA</td>
<td>AAA</td>
</tr>
</tbody>
</table>
</BODY>
</HTML>
代码岂不是更快
using System;
using System.Text;public class MyClass
{
public static void Main()
{
//以下代码用于生成模拟数据
//************************
const int LENGTH = 11;
string[] strArray = new string[LENGTH];
for(int i = 0; i < LENGTH; ++i)
{
strArray[i] = i.ToString();
}
//************************
//以上代码用于生成模拟数据 //生成的表格的列数,大于0
const int COLUMN_COUNT = 3;
//获得数据的数量
int count = strArray.Length;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < count; i += COLUMN_COUNT)
{
sb.Append("<tr>\r\n");
for(int j = 0; j < COLUMN_COUNT; ++j)
{
//如果下标大于数据数量,退出
if(i + j >= count)
{
break;
}
sb.AppendFormat("<td>{0}</td>\r\n", strArray[i + j]);
}
sb.Append("</tr>\r\n");
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
}
<tr>
<BYB_RECORD NUM=3><td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td></BYB_RECORD>
</tr>
</BYB_Documents>比如说这段模板就是取热点新闻的6条记录, BYB_RECORD NUM=3 就是一行3条
BYB_Document FIELD="DOCTITLE" 就是取标题.现在我根据正则已经生成了
<tr>
<td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
<td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
<td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
</tr>
<tr>
<td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
<td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
<td height="20">·<BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document></td>
</tr>这样的字符串现在只需要把
BYB_Document FIELD="DOCTITLE" >文档标题</BYB_Document>
替换成相应的记录标题就可以了.6个标题在一个DATESET里存着了..就是这样的情况
{
Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));
}
int i = 0;
DataSet ds1 = new DataSet();
string DoReplace(Match m)
{
return ds1.Tables[0].Rows[i]["ColumnName"].ToString();
i++;
}
不能写在一个类库的方法里???
楼上的朋友 你的i++好象永远也访问不到呀
______________________________________________哈哈,确实!
更正如下:private void test_Click(object sender, EventArgs e)
{
Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));
}
int i = 0;
DataSet ds1 = new DataSet();
string DoReplace(Match m)
{
try
{
return ds1.Tables[0].Rows[i]["ColumnName"].ToString();
}
finally
{
i++;
}
}
Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));是不是只能写在点击事件中???
不能写在一个类库的方法里???
_________________________________当然可以写在类方法里,只是我为了测试才写在按钮里的。
//using System.Text.RegularExpressions;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;DataSet tempDS=得到的DS;public string checkDocument(string s)
{
MatchEvaluator myEvaluator = new MatchEvaluator(this.DoReplace);
s=Regex.Replace(s,Regexs_DL.BYB_DOCUMENT,myEvaluator);
return s;//返回替换后S.
}
public string DoReplace(Match m)
{
try
{
return tempDS.Tables[0].Rows[i][0].ToString();
}
finally
{
i++;
}
}我F11跟踪的时候..发现return s;//返回替换后S. S的值没变化.....
{
}
这里面就Return了.... 能帮忙解决 另送分.谢谢了.
{
string str = Regex.Replace("<tr><td>AAA</td><td>AAA</td><td>AAA</td></tr>", "AAA", new MatchEvaluator(DoReplace));
MessageBox.Show(str);//str="<tr><td>1</td><td>2</td><td>3</td></tr>"
}
int i = 0;
string[] strArr = new string[] { "1", "2", "3", "4", "5" };
string DoReplace(Match m)
{
try
{
return strArr[i];
}
finally
{
i++;
}
}
-------------------------------------------------------------------------
的确有特殊字符..还不少呢.如何取消转义????public const string BYB_DOCUMENT="<(BYB_DOCUMENT)[^>]*?(?:(?:FIELD\\s*=\\s*[\"\']?(?<FIELD>[^\"\'\\s>]*)|NUM\\s*=\\s*[\"\']?(?<NUM>[^\"\'\\s>]*)|EXTRA\\s*=\\s*[\"\']?(?<EXTRA>[^\"\'\\s>]*)|DATEFORMAT\\s*=\\s*[\"\']?(?<DATEFORMAT>[^\"\'\\s>]*)|AUTOLINK\\s*=\\s*[\"\']?(?<AUTOLINK>[^\"\'\\s>]*)|TARGET\\s*=\\s*[\"\']?(?<TARGET>[^\"\'\\s>]*)|)[^>]*?)*>(?<innerhtml>[\\s\\S]*?)</\\1>";这是我定义的正则...