.net 4 xslt 转换扩展功能损坏

2023-12-12

我正在升级 ASP.NET v3.5 Web 应用程序。到 v4,我在 XmlDataSource 对象上使用的 XSLT 转换遇到一些问题。

XSLT 文件的一部分:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:HttpUtility="ds:HttpUtility">
  <xsl:output method="xml" indent="yes" encoding="utf-8"/>
  <xsl:template match="/Menus">
    <MenuItems>
      <xsl:call-template name="MenuListing" />
    </MenuItems>
  </xsl:template>

  <xsl:template name="MenuListing">
    <xsl:apply-templates select="Menu" />
  </xsl:template>

  <xsl:template match="Menu">
      <MenuItem>
        <xsl:attribute name="Text">
          <xsl:value-of select="HttpUtility:HtmlEncode(MenuTitle)"/>
        </xsl:attribute>
        <xsl:attribute name="ToolTip">
          <xsl:value-of select="MenuTitle"/>
        </xsl:attribute>
      </MenuItem>
  </xsl:template>
</xsl:stylesheet>

问题似乎出在线上

<xsl:value-of select="HttpUtility:HtmlEncode(MenuTitle)"/>

删除它并用普通文本替换它,它就会起作用。我设置 XML 数据源的方式:

    xmlDataSource.TransformArgumentList.AddExtensionObject("ds:HttpUtility", new System.Web.HttpUtility());
    xmlDataSource.Data = Cache.FetchPageMenu();

我一直在 Microsoft 页面上搜索 v4 中的任何更改,但找不到任何更改。所有这些在 v3.5(以及 v2 之前)中都运行良好。没有收到任何错误,数据只是不显示。


问题似乎是 .NET 4.0 引入了额外的重载HttpUtility.HtmlEncode。到 .NET 3.5 为止,存在以下重载:

public static string HtmlEncode(string s);
public static void HtmlEncode(string s, TextWriter output);

.NET 4.0还有以下方法:

public static string HtmlEncode(object value);

这导致XslTransformException:

(方法调用不明确。扩展对象“ds:HttpUtility”包含多个具有 1 个参数的“HtmlEncode”方法。

您可能看不到异常,因为它是在某处捕获的并且没有立即报告。

使用 .NET Framework 类作为扩展对象是一件脆弱的事情,因为新的 Framework 版本可能会破坏您的转换。

解决方法是创建一个自定义包装类并将其用作扩展对象。此包装类可能没有具有相同数量参数的重载:

class ExtensionObject
{
    public string HtmlEncode(string input)
    {
        return System.Web.HttpUtility.HtmlEncode(input);
    }
}

//...
XsltArgumentList arguments = new XsltArgumentList();
arguments.AddExtensionObject("my:HttpUtility", new ExtensionObject());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.net 4 xslt 转换扩展功能损坏 的相关文章

随机推荐

  • 使用密码对一组文件进行打包 (WinRAR)

    我会尽力让它尽可能短 我正在寻找一个 bat 文件来 rar 和密码文件夹 其中包含文件 但问题比我想象的要棘手一些 每个文件夹中可以包含 1 到 400 个文件 我有两个 txt文件 一个具有所需数量的 rar 文件名 一个具有所需数量的
  • 如何在 Rust 中创建一个具有需要生命周期的特征的通用函数?

    我正在尝试编写一个与数据库一起使用并代表可以存储的内容的特征 为此 该特征继承自其他特征 其中包括serde Deserialize trait trait Storable lt de gt Serialize Deserialize l
  • TableAdapters SQL 注入

    您好 我正在使用一个数据集 在该数据集中我有一个表适配器 在我的表适配器中 我使用存储过程作为查询 如果我使用以下行通过表适配器插入表单数据 是否可以安全地防止 SQL 注入 谢谢 UserDataSetTableAdapters User
  • 初始化控制器和 FXML 链接控制器之间的区别?

    直到最近我还不知道你可以设置控制器fx controller in the FXML文件所以我依赖FXMLLoader s setController来管理链接 那么 是否有任何理由像特定情况一样使用一个而不是另一个overrideable
  • 在Python中计算XMX^T对角线的快速方法

    我需要在没有 for 循环的情况下计算 XMX T 的对角线 或者换句话说 替换以下 for 循环 X nump random randn 10000 100 M numpy random rand 100 100 out numpy ze
  • 如何使用javascript显示jquery页面(在div内)?

    这是我的问题 我调用这个方法 它的作用是 使用 jQuery 在服务器上发布一些数据 我想使用从服务器收到的结果显示页面 我的页面index html div other page content div a class bluebutto
  • LetsEncrypt 根证书过期会破坏 Azure Function Node 应用程序

    我有一个作为 Azure 函数运行的节点应用程序 每 60 秒它会进行多次 Web API 调用 其中一个 Web API 的 SSL 证书由 LetsEncrypt R3 签名 2021 年 9 月 30 日 根证书过期 https le
  • C# 停止BackgroundWorker

    我对后台工作人员有疑问 我在后台工作人员中有无限循环 我怎样才能阻止它 将其更改为非无限循环 The BackgroundWorker具有内置的取消支持 取消后台工作人员调用BackgroundWorker CancelAsync 您还需要
  • opencv:无法解析的外部符号

    我知道这个问题是all over the place 但将库目录添加到项目属性的魔杖对我来说仍然不起作用 我跟着Visual Studio 教程 2013年我这里有 和环境变量设置 for opencv 3 0 测试版 这是相同的代码Tes
  • Jquery 中 .load() 和 .ajax() 函数之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 id load 和 ajax 之间的区别 我在代码中使用 ajax 进行异步调用 在阅读有关 load 的内容时 它看起来好像做了同样的事情 这两种方法之间有什么区别 ajax 是最可配置的 您可以在
  • 布局问题:自动增长标签(SWT)

    我正在使用 GridLayout 尝试使标签自动增长而不隐藏其任何内容 这是一个要测试的简单代码 每次按下按钮时 标签文本都会变大 但只有在水平调整窗口大小后 我才能获得正确的布局 有没有什么方法可以解决这个问题而无需调整窗口大小 我想我已
  • java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication Maven

    我正在尝试创建一个 spring mvc 应用程序 这是我的 pom xml
  • Ruby 内部展平(数组的数组)

    我有一个如下所示的数组 0 a 2 b 3 c 4 d 5 e 6 f 7 g 也就是说 元素数组可以是 1 2 元素数组 或 2 2 元素数组的数组 我试图找到一种优雅的方法来 展平 这个数组 以便 2 的元素扩展到根级元素 在这个例子中
  • 文件未通过 PHP 上传到本地主机

    我无法使用 PHP 将文件上传到本地主机 我创建了简单的 html 表单和 php 脚本 但是我收到这些错误消息 导入 html
  • 如何使用 Boost 解压压缩数据向量?

    我有一个包含 zlib 压缩 压缩 数据的向量 我想用Boost解压它filtering istream 他们的网站上只有一个示例 它对数据流进行操作 而不是我拥有的向量 vector
  • 使用客户端 Java 代码进行 Spring boot 分段文件上传

    我在 Spring Boot 中编写了一个安静的 Web 服务来接收该文件 RequestMapping value upload method RequestMethod POST ResponseBody public void upl
  • 在 Windows 7 64 位中,graphics.h 无法在带有 MinGW 的代码块中工作

    我已经从以下站点设置了在 CodeBlocks 中执行图形代码所需的图形文件 http www codewithc com how to include graphics h in codeblocks 然后我尝试了这个示例代码 inclu
  • 关于 webkit-min-device-pixel-ratio 的问题

    所有浏览器都会理解或者更确切地说应用以下语句的 CSS 规则 media screen and webkit min device pixel ratio 0 CSS Styles 另外 如果上面使用 仅屏幕 而不是屏幕 会有什么区别 me
  • UIImage 更改时动画快照

    我有一个 UIImageView 当按住按钮时它会在屏幕上运行 当按下按钮时 将更改 UIImageView 的 UIImage 当松开按钮时 我将其更改为其原始 UIImage 当图像变回原样时 它会恢复到图像开始的位置 按下按钮时调用此
  • .net 4 xslt 转换扩展功能损坏

    我正在升级 ASP NET v3 5 Web 应用程序 到 v4 我在 XmlDataSource 对象上使用的 XSLT 转换遇到一些问题 XSLT 文件的一部分