在代码中构建HTML的技术

Ian*_*oyd 3 html language-agnostic code-generation

html模板作为资源编译到应用程序中.一个片段的HTML模板的样子:

<A href="%PANELLINK%" target="_blank">
   <IMG border="0" src="%PANELIMAGE%" style="%IMAGESTYLE%">
</A><BR>
%CAPTIONTEXT%
Run Code Online (Sandbox Code Playgroud)

我喜欢这样,因为较大的资源HTML文件包含样式,无怪癖模式等.

但总是如此,他们现在想要在没有链接时应该省略Anchor标签的选项.如果没有标题,则应省略BR标记.


考虑技术Nº1

鉴于我不想在C#代码中构建完整的HTML片段,我考虑过如下:

%ANCHORSTARTTAGPREFIX%<A href="%PANELLINK%" target="_blank">%ANCHORSTARTTAGPOSTFIX%
   <IMG border="0" src="%PANELIMAGE%" style="%IMAGESTYLE%">
%ANCHORENDTAGPREFIX%</A>%ANCHORENDTAGPOSTFIX%CAPTIONPREFIX%<BR>
%CAPTIONTEXT%%CAPTIONPOSTFIX%
Run Code Online (Sandbox Code Playgroud)

我可以使用前缀和后缀将HTML代码转换为:

<!--<A href="%PANELLINK%" target="_blank">-->
   <IMG border="0" src="%PANELIMAGE%" style="%IMAGESTYLE%">
<!--</A>--><!--<BR>
%CAPTIONTEXT%-->
Run Code Online (Sandbox Code Playgroud)

但这只是荒谬的,加上一个回答者提醒我们它浪费了带宽,并且可能是错误的.


考虑技术Nº2

批发更换标签:

%AnchorStartTag%
   <IMG border="0" src="%PANELIMAGE%" style="%IMAGESTYLE%">
%AnchorEndTag%%CaptionStuff%
Run Code Online (Sandbox Code Playgroud)

并做一个find-replace来改变

%AnchorStartTag%
Run Code Online (Sandbox Code Playgroud)

"<A href=\"foo\" target=\"blank\""
Run Code Online (Sandbox Code Playgroud)

考虑技术Nº3

我考虑过为重要的HTML元素提供ID:

<A id="anchor" href="%PANELLINK%" target="_blank">
   <IMG border="0" src="%PANELIMAGE%" style="%IMAGESTYLE%">
</A><BR id="captionBreak">
%CAPTIONTEXT%
Run Code Online (Sandbox Code Playgroud)

然后使用HTML DOM解析器以编程方式删除节点.但是没有简单的方法可以访问值得信赖的HTML DOM解析器.如果HTML是xhtml,我将使用各种内置/本机可用的xml DOM解析器.


考虑技术Nº4

到目前为止我实际拥有的是:

private const String htmlEmptyTemplate = 
    @"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN\"""+Environment.NewLine+
    @"   ""http://www.w3.org/TR/html4/strict.dtd"">"+Environment.NewLine+
    @"<HTML>"+Environment.NewLine+
    @"<HEAD>"+Environment.NewLine+
    @"  <TITLE>New Document</TITLE>"+Environment.NewLine+
    @"  <META http-equiv=""X-UA-Compatible"" content=""IE=edge"">"""+Environment.NewLine+
    @"  <META http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"">"+Environment.NewLine+
    @"</HEAD>"+Environment.NewLine+
    @""+Environment.NewLine+
    @"<BODY style=""margin: 0 auto"">"+Environment.NewLine+
    @"  <DIV style=""text-align:center;"">"+Environment.NewLine+
    @"      %ContentArea%"+Environment.NewLine+
    @"  </DIV>" + Environment.NewLine +
    @"</BODY>" + Environment.NewLine +
    @"</HTML>";

private const String htmlAnchorStartTag = 
    @"<A href=""%PANELLINK%"" target=""_blank"">";

//Image is forbidden from having end tag
private const String htmlImageTag = 
    @"<IMG border=""0"" src=""%PANELIMAGE%"" style=""%IMAGESTYLE%"">";

private const String htmlCaptionArea =
    @"<BR>%CAPTIONTEXT%";
Run Code Online (Sandbox Code Playgroud)

我已经想要挖出我的眼球了.在代码中构建HTML是一场噩梦.写作是一场噩梦,调试的噩梦和维持的噩梦 - 这会让下一个人感到困难.我希望有另一个解决方案 - 因为我下一个人.

ras*_*asx 11

我在这个游戏中的声望点已经很低了,这让我可以自由地告诉你,你,先生或女士,非常需要XSLT.如果失败了(你可能会),你需要在VB.NET中查看XML文字(它为你提供了你正在寻找的基于模板的解决方案......).由于我更喜欢​​留在C#中(即使我是在VBA上出生并长大的),我使用的是XSLT.

我的两个不受欢迎的建议都要求使用XHTML而不是HTML.仅此要求对许多传统开发人员来说是一个很大的转折点.我已经可以通过使用大写字母来查看HTML元素了,你会发现我的评论完全没用.所以我现在应该停止写作.