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

升级XSL样式表命名空间后清理ADO XML输出异常如何修复

你当前遇到的问题主要由3个错误导致:

  • 新样式表将XSLT命名空间设为了默认命名空间,导致你创建的<data>、<row>等输出元素都继承了XSLT的命名空间,所以会多出xmlns="http://www.w3.org/1999/XSL/Transform"属性
  • 缺少s前缀对应的命名空间声明,导致匹配s:Schema的规则没有生效
  • 根模板匹配的是/文档根节点而非<xml>根元素,导致根标签的处理不符合预期

以下是修正后可直接使用的完整样式表,兼容MSXML2.DOMDocument60运行环境:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
  xmlns:rs="urn:schemas-microsoft-com:rowset"
  xmlns:z="#RowsetSchema"
  exclude-result-prefixes="s rs z xsl">

  <!-- 输出配置:匹配预期格式,去掉XML声明、启用缩进 -->
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>

  <!-- 匹配根xml元素,保留标签结构,过滤所有命名空间属性 -->
  <xsl:template match="/*">
    <xml>
      <xsl:apply-templates select="node()"/>
    </xml>
  </xsl:template>

  <!-- 通用节点复制规则 -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 移除rs:insert标签,仅透传子内容 -->
  <xsl:template match="rs:insert">
    <xsl:apply-templates select="node()"/>
  </xsl:template>

  <!-- rs:data转换为无属性的纯data标签 -->
  <xsl:template match="rs:data">
    <data>
      <xsl:apply-templates select="node()"/>
    </data>
  </xsl:template>

  <!-- z:row转换为纯row标签,保留所有属性 -->
  <xsl:template match="z:row">
    <row>
      <xsl:copy-of select="@*"/>
    </row>
  </xsl:template>

  <!-- 移除整个Schema节点 -->
  <xsl:template match="s:Schema"/>

  <!-- 兼容rs:forcenull属性转换逻辑 -->
  <xsl:template match="@rs:forcenull">
    <xsl:attribute name="forcenull">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>

上述样式表完全满足你列出的4项需求,输入数据结构不变的情况下可通用适配动态内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:18:02