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

如何从主XML的Trailer字段嵌套XML中提取指定字段并修正XSLT

解决方案

核心问题是中的嵌套XML是转义的文本内容,无法直接用XPath提取节点,需要先将其解析为可操作的XML节点树,再提取目标字段并与原

组合。

假设输入XML示例

<MainRequest>
  <Header>
    <Field1>Value1</Field1>
    <Field2>Value2</Field2>
  </Header>
  <Trailer>&lt;NestedXML&gt;&lt;Field3&gt;Val3&lt;/Field3&gt;&lt;Field5&gt;TargetValue&lt;/Field5&gt;&lt;/NestedXML&gt;</Trailer>
</MainRequest>

XSLT 2.0+ 实现(推荐,兼容性更好)

大多数现代XML处理器(如Saxon、Altova)支持XSLT 2.0及以上版本,可直接使用parse-xml()函数解析转义文本:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/MainRequest">
    <OutputXML>
      <!-- 原样保留原Header节点 -->
      <xsl:copy-of select="Header"/>
      <!-- 解析Trailer中的转义XML字符串为节点树 -->
      <xsl:variable name="nestedXmlTree" select="parse-xml(Trailer)"/>
      <!-- 提取嵌套XML中的Field5,并包装到指定结构 -->
      <ExtractedField>
        <xsl:copy-of select="$nestedXmlTree//Field5"/>
      </ExtractedField>
    </OutputXML>
  </xsl:template>
</xsl:stylesheet>

XSLT 1.0 兼容方案(依赖处理器扩展)

如果只能使用XSLT 1.0,需要借助EXSLT或厂商扩展函数将转义文本转换为节点集:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exsl="http://exslt.org/common"
                extension-element-prefixes="exsl">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/MainRequest">
    <OutputXML>
      <xsl:copy-of select="Header"/>
      <!-- 先取消转义输出文本,再转换为节点集 -->
      <xsl:variable name="unescapedNestedXml">
        <xsl:value-of select="Trailer" disable-output-escaping="yes"/>
      </xsl:variable>
      <xsl:variable name="nestedXmlTree" select="exsl:node-set($unescapedNestedXml)"/>
      <ExtractedField>
        <xsl:copy-of select="$nestedXmlTree//Field5"/>
      </ExtractedField>
    </OutputXML>
  </xsl:template>
</xsl:stylesheet>

输出结果示例

<OutputXML>
  <Header>
    <Field1>Value1</Field1>
    <Field2>Value2</Field2>
  </Header>
  <ExtractedField>
    <Field5>TargetValue</Field5>
  </ExtractedField>
</OutputXML>

注意事项

  • XSLT 1.0方案依赖处理器支持disable-output-escaping和EXSLT扩展,不同厂商实现可能有差异,稳定性不如2.0+版本。
  • 确保中的转义XML是格式正确的XML字符串,否则解析会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:24:50