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

使用XSLT进行XML转HTML异常:多余内容输出问题求助

问题排查:XSLT转换XML时意外输出多余内容

我尝试用XSLT将XML转换为HTML,仅需提取<metadata>标签下的<title>并生成<h1>标签,但实际输出额外包含了“Hi hello world”内容。刚接触XSLT仅一天,恳请帮忙排查问题。

XML代码

<document>
  <metadata>
     <title>Sign in to my account</title>
  </metadata>
  <topic>
     <conceptuldocument>
         <legacybold> Hi hello world </legacybold>
      </conceptuldocument>
  </topic>
</document>

XSLT代码

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <xsl:choose>
      <xsl:when  test="metadata">
        <xsl:apply-templates select="metadata"/>
      </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="metadata">
    <h1>
      <xsl:value-of select="title"/>
    </h1>
  </xsl:template>
</xsl:stylesheet>

C#代码

using (StringWriter sw = new StringWriter())
{
    transform.Transform(xmldocument.DocumentElement,null, sw);
    string html = sw.ToString();
}

问题原因及解决方法

问题源于XSLT的默认模板规则:当XSLT遇到没有匹配模板的节点时,会自动调用默认模板遍历所有子节点,并输出所有文本节点内容,这就是“Hi hello world”被意外输出的原因。

解决方法是添加一个空模板,匹配所有不需要处理的节点,阻止默认模板的行为:

修改后的XSLT代码:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="html" indent="yes"/>

  <!-- 匹配document根节点,仅处理metadata -->
  <xsl:template match="/document">
    <xsl:apply-templates select="metadata"/>
  </xsl:template>

  <!-- 处理metadata生成h1标签 -->
  <xsl:template match="metadata">
    <h1>
      <xsl:value-of select="title"/>
    </h1>
  </xsl:template>

  <!-- 空模板,拦截所有未自定义处理的节点,避免默认输出 -->
  <xsl:template match="*|text()|@*"/>
</xsl:stylesheet>

同时可以简化原代码里的<xsl:choose>逻辑——如果<metadata>节点不存在,<xsl:apply-templates>不会执行任何操作,无需额外判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:20:26