You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在XSLT二级转换中引用或传入LabelsInfo.xml的问题

解决XSLT二级转换中无法读取LabelsInfo.xml的问题

核心问题分析

  • 二级XSL中document()加载失败:WebView2的执行上下文与主XSL不同,相对路径基准变化,或安全策略限制了跨文档访问
  • 字符串传入后无法用XPath查询:XML字符串未被解析为DOM节点集,XPath仅能作用于XML节点而非纯文本

具体解决方案

方案1:修正document()的路径引用

在二级XSL中使用绝对路径或WebView2可识别的本地URI加载文件,避免相对路径的上下文差异:

<!-- 使用本地绝对URI示例 -->
<xsl:variable name="labelsDoc" select="document('file:///C:/your-project/LabelsInfo.xml')"/>
<!-- 或基于页面根路径的绝对路径 -->
<xsl:variable name="labelsDoc" select="document('/LabelsInfo.xml')"/>

方案2:JS中解析XML为DOM节点后传入二级XSL

不要直接传递字符串,先将LabelsInfo.xml解析为XML DOM对象,再作为节点参数传入转换:

function filterHistory() {
  fetch('LabelsInfo.xml')
    .then(res => res.text())
    .then(xmlText => {
      const parser = new DOMParser();
      const labelsDom = parser.parseFromString(xmlText, 'text/xml');
      
      // 初始化二级XSL处理器
      const xsltProc = new XSLTProcessor();
      const xsltDoc = /* 加载二级XSL文件的DOM对象 */;
      xsltProc.importStylesheet(xsltDoc);
      
      // 传入解析后的XML节点参数
      xsltProc.setParameter(null, 'labelsDoc', labelsDom);
      
      // 执行转换并处理结果
      const resultDoc = xsltProc.transformToDocument(/* 待转换的源XML */);
      // 渲染结果到页面...
    });
}

二级XSL中直接接收节点参数并使用XPath查询:

<xsl:param name="labelsDoc"/>
<!-- 根据索引匹配值班描述示例 -->
<xsl:value-of select="$labelsDoc//Label[@index=$currentRowIndex]/@description"/>

方案3:从主XSL传递已加载的节点集

利用主XSL已成功加载LabelsInfo.xml的优势,直接将节点集作为参数传递给二级转换:
主XSL代码:

<xsl:variable name="labelsDoc" select="document('LabelsInfo.xml')"/>
<!-- 调用二级模板时传递节点集 -->
<xsl:apply-templates select="historyData">
  <xsl:with-param name="labelsDoc" select="$labelsDoc"/>
</xsl:apply-templates>

二级XSL接收参数后直接使用,与方案2的XSL代码一致。

额外注意事项

  • 检查WebView2权限:确保允许访问本地文件,初始化时可配置CoreWebView2Settings开启相关权限
  • 验证XML格式:确保LabelsInfo.xml无语法错误,否则解析或加载会失败
  • XSLT版本兼容:若使用XSLT 1.0,节点集参数传递需严格遵循规范;XSLT 2.0+支持更灵活的节点处理

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:25:00