通常要走的路是在运行时为转换提供参数并编写转换,以便其行为由参数控制。
通常当我这样做时,我只传入一个参数——一个 XML 文档——并让模板查询它以确定它们应该做什么。所以你会看到类似的东西:
<xsl:template match="*">
<xsl:variable name="cfg" select="$config/*[name() = current()]"/>
<xsl:choose>
<xsl:when test="cfg/elementType = 'option'">
<xsl:apply-templates select="." mode="option">
<xsl:when test="cfg/elementType = 'optgroup'">
<xsl:apply-templates select="." mode="optgroup">
<xsl:when test="cfg/elementType = 'a'">
<xsl:apply-templates select="." mode="a">
等等。
使用 XML/XSLT 动态地提供 WebBrowser 控件非常简单:
using (XmlWriter xw = XmlWriter.Create(new StringWriter(output)))
{
StringBuilder output = new StringBuilder();
XsltArgumentList args = new XsltArgumentList();
args.AddParam("config", myConfigXml);
myXslt.Transform(myXml, args, xw);
xw.Flush();
myWebBrowser.DocumentText = output.ToString();
}
如果用户正在更新的 UI 在 WebBrowser 本身中(即 HTML 页面包含 HTML UI 控件),则您应该使用动态 HTML 技术,就像页面在普通浏览器中显示时一样。那是一袋完全不同的香蕉。