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

如何从XML处理指令中提取值?求XSLT实现方法

看起来你卡在了XML处理指令(PI)的值提取上,我来帮你捋清楚问题所在以及正确的解决办法~

首先,你之前的尝试没成功的核心原因是没正确选择到处理指令节点。XML里的<?ConditionState 4?>属于处理指令,不是普通元素或文本节点,XPath需要用专门的processing-instruction()函数来定位它。

正确的XPath选择方式

要选择root元素下的ConditionState处理指令,你需要用:

processing-instruction('ConditionState')

这个函数会匹配名称为ConditionState的处理指令节点。

完整的XSLT示例

下面是能直接得到你想要结果的样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/root">
    <root>
      <!-- 提取处理指令的内容,并用normalize-space去掉前后空格 -->
      <xsl:value-of select="normalize-space(processing-instruction('ConditionState'))"/>
    </root>
  </xsl:template>
</xsl:stylesheet>

把这个样式表应用到你的输入XML上,输出就是<root>4</root>,完全符合你的需求。

为什么你之前的方法无效?

  • 你写的<xsl:value-of select="root[?ConditionState]">是错误的XPath语法,XPath没有用?来匹配处理指令的规则,必须用processing-instruction()函数。
  • 你尝试的substring-after(substring-before(/root,'?>'),'<?ConditionState ')无效,是因为/root是元素节点,直接对它调用字符串函数时,只会取元素内部的文本内容,而处理指令是root的子节点,不属于文本内容,所以根本取不到目标字符串。

如果你的XSLT版本是2.0及以上,还可以用tokenize来更精准地提取数字,但对于这个场景,XSLT 1.0的normalize-space已经足够好用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:23:12