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

如何在单个XSLT文件中使用两个XML文件并通过嵌套模板提取目标值

XSLT按顺序提取字段的实现方法

原有代码问题

  1. XSLT 规范不允许在<xsl:template>内部嵌套定义另一个模板,所有<xsl:template>必须是<xsl:stylesheet>的直接子节点,你嵌套写seconddto模板的写法本身属于语法错误,无法正常执行。
  2. 标签大小写错误:XSLT 标签大小写敏感,<Xsl:template>的写法不符合规范,必须统一为小写<xsl:template>。
  3. 标签未闭合:<xsl:value-of select="name">缺少闭合标记/>。

正确实现方案

你需要的输出逻辑不需要所谓的“嵌套模板匹配”,直接在firstdto的处理模板中通过XPath寻址获取seconddto的对应字段即可,作用域会保持当前firstdto的上下文,符合你的预期。

场景1:单XML文件同时包含firstdto和seconddto节点

假设你的源XML根节点为root,结构如下:

<root>
  <firstdto>
    <name>google</name>
    <url>google.com</url>
  </firstdto>
  <seconddto>
    <name>yahoo</name>
    <url>yahoo.com</url>
  </seconddto>
</root>

对应的XSLT代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:apply-templates select="root/firstdto"/>
  </xsl:template>

  <xsl:template match="firstdto">
    <!-- 输出First.xml的url -->
    <xsl:value-of select="url"/>
    <xsl:text>&#xa;</xsl:text>
    <!-- 输出Second.xml的url,用绝对路径寻址seconddto节点 -->
    <xsl:value-of select="/root/seconddto/url"/>
    <xsl:text>&#xa;</xsl:text>
    <!-- 输出当前firstdto的name,上下文保持有效 -->
    <xsl:value-of select="name"/>
  </xsl:template>
</xsl:stylesheet>

场景2:firstdto和seconddto分属两个独立XML文件

如果seconddto存放在独立的Second.xml中,使用document()函数加载外部文件即可:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:apply-templates select="firstdto"/>
  </xsl:template>

  <xsl:template match="firstdto">
    <xsl:value-of select="url"/>
    <xsl:text>&#xa;</xsl:text>
    <!-- 加载外部Second.xml文件,取seconddto的url字段 -->
    <xsl:value-of select="document('Second.xml')/seconddto/url"/>
    <xsl:text>&#xa;</xsl:text>
    <xsl:value-of select="name"/>
  </xsl:template>
</xsl:stylesheet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:12:00