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

如何在XSLT中读取XML文件xml-stylesheet处理指令的href属性

XSLT读取xml-stylesheet处理指令属性的实现方法

完全可以读取,XSLT原生支持访问XML文档中的处理指令节点,具体实现方式如下:

核心逻辑说明

处理指令不属于XML元素节点,其内容是纯文本格式,无法直接通过@属性名的方式读取属性,需要先获取处理指令的文本内容,再做字符串解析提取href的值。


具体实现步骤

1. 获取xml-stylesheet处理指令内容

通过XPath的processing-instruction()轴直接获取根级别下的xml-stylesheet处理指令:

<xsl:variable name="stylesheet_pi" select="/processing-instruction('xml-stylesheet')" />

获取到的变量值就是类似type="text/xsl" href="recibo.xsl"的纯文本内容。

2. 提取href属性值

根据你使用的XSLT版本选择对应的解析方式:

XSLT 2.0及以上版本(推荐,正则匹配更便捷)

<!-- 提取双引号包裹的href值 -->
<xsl:variable name="href_val" select="replace($stylesheet_pi, '.*href=&quot;([^&quot;]+)&quot;.*', '$1')" />

XSLT 1.0版本(字符串截取实现)

<xsl:variable name="href_start" select="substring-after($stylesheet_pi, 'href=&quot;')" />
<xsl:variable name="href_val" select="substring-before($href_start, '&quot;')" />

3. 判断发票类型

直接判断提取到的href_val值即可区分发票类型:

<xsl:choose>
  <xsl:when test="$href_val = 'recibo.xsl'">
    <!-- recibo类型发票的处理逻辑 -->
  </xsl:when>
  <xsl:when test="$href_val = '其他xsl文件名'">
    <!-- 其他类型发票的处理逻辑 -->
  </xsl:when>
  <xsl:otherwise>
    <!-- 未匹配到对应类型的处理逻辑 -->
  </xsl:otherwise>
</xsl:choose>

注意事项

  • 处理指令和XML根元素平级,必须从根路径/下查找,不要在根元素的子节点路径下检索
  • 如果存在多个xml-stylesheet处理指令,可以通过下标获取指定位置的指令,例如/processing-instruction('xml-stylesheet')[1]获取第一个处理指令
  • 如果你的业务场景中href值用单引号包裹,把上面代码里的&quot;替换为&apos;即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:03