UWP中XslCompiledTransform加载XSL报错:该平台不支持XSLT编译
解决UWP中XslCompiledTransform编译不支持的问题
嘿,你遇到的这个System.PlatformNotSupportedException其实是UWP平台的明确限制:XslCompiledTransform的编译功能在UWP沙箱环境下是被禁用的。这个类的编译逻辑依赖动态代码生成能力,而UWP出于安全和性能考量,不允许应用进行这类操作,所以直接调用Load方法必然会抛出异常。
替代方案:使用UWP原生XSLT API
UWP专门提供了Windows.Data.Xml.Xsl.XslTransform类,它是为UWP平台量身打造的,支持XSLT 1.0转换,完全避开了编译环节的限制,正好适配你的XML转HTML需求。
修改后的代码实现
把你的ConvertXML2HTML方法改成下面这样就可以正常工作了:
private async void ConvertXML2HTML(IStorageFile xmlFile, IStorageFile xslFile) { // 读取XML和XSL文件的文本内容 string xmlText = await FileIO.ReadTextAsync(xmlFile); string xslText = await FileIO.ReadTextAsync(xslFile); // 初始化UWP原生的XSL转换器 Windows.Data.Xml.Xsl.XslTransform xsltTransformer = new Windows.Data.Xml.Xsl.XslTransform(); xsltTransformer.LoadFromString(xslText); // 执行XML到HTML的转换 string htmlResult = xsltTransformer.TransformToString(xmlText); // 接下来你就可以把htmlResult保存为.html文件,再进行PDF生成的步骤了 // 示例:await FileIO.WriteTextAsync(htmlOutputFile, htmlResult); }
为什么这个方案能解决问题?
- 这是UWP官方提供的API,完全适配沙箱环境,不存在平台兼容性问题;
- 你的XSL文件用的是1.0版本,这个API完美支持XSLT 1.0的所有语法,包括你用到的模板调用、条件判断等;
- 代码更简洁,不需要处理复杂的流转换,直接用字符串读写即可。
关于你之前尝试的EnableScript设置
你之前开启EnableScript的操作其实没抓住问题本质——报错不是因为脚本被禁用,而是UWP根本不允许XSLT编译,所以这个设置无法解决问题。
内容的提问来源于stack exchange,提问作者Wt.N
相关产品推荐
相关产品推荐

