私はこのようなhtmlを持っています:
<table class="tbNoBorder" ..some attr here...>
<tr><td>1</td></tr><tr><td>2</td></tr>
</table>
<table ..some attr here... >
<tr><td>1</td></tr><tr><td>2</td></tr>
</table>
正規表現を使用して変換する必要があります
<table class="tbNoBorder" cellspacing="0" cellpadding="0" ..some attr here...>
<tr><td style="padding: 5px;">1</td></tr><tr><td style="padding: 5px;">2</td></tr>
</table>
<table cellspacing="0" cellpadding="0" ..some attr here... >
<tr><td style="border: solid 1px #ccc; padding: 5px;">1</td></tr><tr><td style="border: solid 1px #ccc; margin: 0; padding: 5px;">2</td></tr>
</table>
次に、それを Word に変換します。そのため、この変換が必要です。クラスtbNoBorderを持つテーブルには境界線があってはなりません。
これを行うためにこのコードを書きましたが、すべてのテーブルには罫線が付いています。最初の正規表現はすべてのテーブルを取得します。それを機能させるためのアイデアはありますか?
//Fixes tables with borders
content = Regex.Replace(content,
@"<table(.*?)(?!tbNoBorder)(.*?)>(.*?)</table>",
m =>
{
var tableContent = Regex.Replace(m.Groups[3].ToString(),
@"<td",
t => "<td style=\"border: solid 1px #ccc; padding: 5px;\"", RegexOptions.IgnoreCase
);
return "<table cellspacing=\"0\" cellpadding=\"0\"" + m.Groups[1] + m.Groups[2] + ">" + tableContent + "</table>";
}, RegexOptions.IgnoreCase
);
//Fixes tables without borders, has class tbNoBorder
content = Regex.Replace(content,
@"<table(.*?)tbNoBorder(.*?)>(.*?)</table>",
m =>
{
var tableContent = Regex.Replace(m.Groups[3].ToString(),
@"<td",
t => "<td style=\"padding: 5px;\"", RegexOptions.IgnoreCase
);
return "<table cellspacing=\"0\" cellpadding=\"0\" + m.Groups[1] + m.Groups[2] + ">" + tableContent + "</table>";
}, RegexOptions.IgnoreCase
);