我有一个HTML模板(如下所示),并且正在通过用户制作的SQL Server函数将其传递,以用空的varchar替换标签(例如$ ChargeAmount_Changed $)。该函数接受两个参数。
该功能的目的是通过其他功能(此处未显示)删除所有未被数据替换的标签。但是,您可能会猜到,发生这种情况时,生成的HTML将具有较大的空白区域。
如何删除未替换标签的段落元素?
-- Start of function
DECLARE @Tags TABLE (
fldTagID INT IDENTITY (1, 1)
, fldTag VARCHAR(50) NOT NULL
)
INSERT INTO @Tags
SELECT fldTag
FROM TagTable WITH (NOLOCK)
WHERE fldEmailFlag = @EmailFlag -- @EmailFlag = Param1
SELECT @RowID = COUNT(fldTag) FROM @Tags
WHILE @RowID <> 0
BEGIN
SELECT @Tag = fldTag
FROM @Tags
WHERE fldTagID = @RowID
SET @Html = REPLACE(@Html, @Tag, '') -- @Html = Param2
SET @RowID = @RowID - 1
END
RETURN @Html
-- End of function
-- Start of template
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> </title>
<style type="text/css">
.cs2654AE3A {
text-align: left;
text-indent: 0pt;
margin: 0pt 0pt 0pt 0pt
}
.cs37BA8FCA {
color: #000000;
background-color: transparent;
font-family: Verdana;
font-size: 9pt;
font-weight: normal;
font-style: normal;
}
</style>
</head>
<body>
<p class="cs2654AE3A"><span class="cs37BA8FCA">A contract item fee has been ??fldAction?? on Contract No.
??fldContractNo?? , for customer ??fldCustomerCode?? .</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">The fee ??fldAction?? is ??fldFeeType??</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">Located on ??fldItemType?? : ??fldItemCode??</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$ChargeAmount_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$ChargeAmount_Crtitical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$StartDate_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$StartDate_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$EndDate_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$EndDate_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$EscalationAmount_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$EscalationAmount_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$AccountCode_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$AccountCode_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$COSAccountCode_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$COSAccountCode_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$InvoiceDesc_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$InvoiceDescription_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$BillingPeriod_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$BillingPeriod_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$BillingCycle_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$BillingCycle_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$FinanceParty_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$FinanceParty_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$FinanceAmount_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$FinanceAmount_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$BillingCustomerCode_Changed$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">$BillingCustomerCode_Critical$</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA">This change was made by : ??fldEmpFullName??</span></p>
<p class="cs2654AE3A"><span class="cs37BA8FCA"> </span></p>
</body>
</html>
-- End of template
我认为这不是针对开发数据库的。
我的猜测是,搜索未删除的标签,然后向后搜索
<p
保存此patindex,向前搜索
</p>
,现在您可以删除所有patindex之间的内容。 (不要忘了在这里计算搜索字符串)
另一种方法可能是:如果您必须处理此类任务,则可以使用JavaScript / jQuery在前端轻松完成。
$('p').each(function( index ) {if($(this).html() === '') { this.remove()}})
这将删除所有空白的段落。