gpt4 book ai didi

c# - "dynamic"XSLT 提供网络浏览器控件?

转载 作者:数据小太阳 更新时间:2023-10-29 02:48:23 25 4
gpt4 key购买 nike

我经常在应用程序中使用 HTML 输出,到目前为止,我已经使用了一些简单的例程来构建 HTML 字符串。我现在想尝试一些不同的东西:

我想将数据序列化为 XML,并提供一些 XSLT 模板来为网络浏览器控件生成 HTML。我让它静态工作(通过编写 XSL 慢慢挖掘),但我需要动态更改 XSL 文档的某些属性:过滤器、路径等以遵循当前的 UI 选择。

数据足够小,更改时的 XML 序列化应该不是问题。我想使用“静态”外部 XSL 文件(以便用户可以在一定程度上自定义输出),但调整 .

我的问题:

这个想法在技术上合理吗?
我可以使用 XML 和 XSL 文档动态地提供 Web 浏览器控件吗?我可以即时修改 XSL 中选定的路径元素和属性吗(即不生成新文件)?如何在网络浏览器控件中做到这一点? (一些让我开始的指示会很好​​..)

[edit]谢谢大家,它正在工作:D[/edit]

最佳答案

通常的方法是在运行时为转换提供参数并编写转换,以便其行为由参数控制。

通常当我这样做时,我只传递一个参数——一个 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 技术,就像页面以普通浏览器。那是一袋完全不同的香蕉。

关于c# - "dynamic"XSLT 提供网络浏览器控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/477446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com