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

出站XML的XSLT转换失效排查及条件转换需求咨询

解决XSLT转换报错及添加条件判断的问题

咱们一步一步来搞定你的问题,先解决那个"No stylesheet associated to this object"的报错,再实现你要的0转false、1转true的逻辑。

一、排查报错原因

首先,这个报错大概率是在线测试工具没有正确关联你的XSLT和源XML文件,但咱们先确认你的XSLT本身有没有容易忽略的小问题:
你的源XML用了默认命名空间http://www.ibm.com/maximo,你在XSLT里给这个命名空间绑定了mea前缀,模板匹配的路径是对的,但有个关键细节:XML要求输出必须有单个根节点,你期望的结果是两个<PARAM>直接并列,这不符合XML规范,部分严格的测试工具会因此报错或无法正常处理。

我先给你修正XSLT,添加一个根节点(比如<PARAMS>)包裹所有输出,同时保留你的原有逻辑:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                exclude-result-prefixes="mea" 
                xmlns:mea="http://www.ibm.com/maximo"> 
  <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/> 
  
  <xsl:template match="/"> 
    <!-- 添加根节点包裹所有PARAM,符合XML规范 -->
    <PARAMS>
      <xsl:apply-templates select="mea:PublishITEM"/> 
    </PARAMS>
  </xsl:template> 
  
  <xsl:template match="mea:PublishITEM"> 
    <xsl:apply-templates select="mea:ITEMSet"/> 
  </xsl:template> 
  
  <xsl:template match="mea:ITEMSet"> 
    <xsl:apply-templates select="mea:ITEM"/> 
  </xsl:template> 
  
  <xsl:template match="mea:ITEM"> 
    <PARAM> 
      <xsl:apply-templates select="mea:ATTACHONISSUE"/> 
    </PARAM> 
  </xsl:template> 
  
  <xsl:template match="mea:ATTACHONISSUE"> 
    <CD-NAME><xsl:value-of select="."/></CD-NAME> 
  </xsl:template> 
</xsl:stylesheet>

如果换了这个XSLT还是报错,你可以检查下测试工具的操作细节:

  • 确认是不是正确上传/选择了源XML和XSLT文件
  • 有些工具要求XSLT必须带XML声明,上面的代码已经在开头添加了<?xml version="1.0" encoding="UTF-8"?>,可以直接使用

二、添加条件判断逻辑

接下来实现你要的需求:当ATTACHONISSUE的值是0时输出false,是1时输出true。咱们修改mea:ATTACHONISSUE对应的模板,用<xsl:choose>做分支判断即可,还可以加个默认分支处理意外值:

完整的最终XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                exclude-result-prefixes="mea" 
                xmlns:mea="http://www.ibm.com/maximo"> 
  <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/> 
  
  <xsl:template match="/"> 
    <PARAMS>
      <xsl:apply-templates select="mea:PublishITEM"/> 
    </PARAMS>
  </xsl:template> 
  
  <xsl:template match="mea:PublishITEM"> 
    <xsl:apply-templates select="mea:ITEMSet"/> 
  </xsl:template> 
  
  <xsl:template match="mea:ITEMSet"> 
    <xsl:apply-templates select="mea:ITEM"/> 
  </xsl:template> 
  
  <xsl:template match="mea:ITEM"> 
    <PARAM> 
      <xsl:apply-templates select="mea:ATTACHONISSUE"/> 
    </PARAM> 
  </xsl:template> 
  
  <xsl:template match="mea:ATTACHONISSUE"> 
    <CD-NAME>
      <xsl:choose>
        <xsl:when test=". = '0'">false</xsl:when>
        <xsl:when test=". = '1'">true</xsl:when>
        <!-- 如果有其他值,默认输出原内容,不需要的话可以删掉这个分支 -->
        <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
      </xsl:choose>
    </CD-NAME> 
  </xsl:template> 
</xsl:stylesheet>

最终转换结果

用这个XSLT处理你的源XML,会得到符合规范的XML输出:

<PARAMS>
  <PARAM> 
    <CD-NAME>false</CD-NAME> 
  </PARAM> 
  <PARAM> 
    <CD-NAME>true</CD-NAME> 
  </PARAM>
</PARAMS>

如果你确实不需要外层的<PARAMS>根节点(虽然不符合XML标准,但有些工具支持非规范输出),直接删掉<PARAMS>和对应的闭合标签即可,但还是建议保留它,避免后续出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:32:51