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

XSLT基于choose的元素选择功能不生效问题求助

现有XML结构

<Document>
  <Row>
    <KEY>NIKE|JB|APPAREL|MENS</KEY>
    <Period>Nov-21</Period>
  </Row>
  <Row>
    <KEY>FASCINATE|JB|ACCESSORIES|LADIES</KEY>
    <Matches>
      <Row>
        <KEY>FASCINATE|JB|ACCESSORIES|LADIES</KEY>
        <Period>Nov-22</Period>
      </Row>
    </Matches>
  </Row>
</Document>

需求

遍历Document下的所有Row节点:

  • 如果当前Row下存在Period节点,直接输出该Period
  • 如果当前Row下不存在Period节点,输出其嵌套的Matches/Row/Period节点
    最终输出每个Row只保留KEY和对应Period两个子节点。

原XSLT代码问题

你写的代码有3个核心错误:

  1. XPath路径错误:以/开头的路径是从文档根节点开始的绝对路径,在xsl:for-each遍历Document/Row的上下文环境中,/Period、/Matches/Row/Period都是从根节点查找对应元素,文档根节点下只有Document元素,所以这两个路径永远返回空。你应该使用相对当前Row节点的相对路径,直接写Period、Matches/Row/Period即可。
  2. 空值判断逻辑错误:XSLT 1.0没有null常量,$period = null的判断逻辑是把变量和名为null的节点做比较,永远返回假,所以你要取嵌套Period的分支永远不会触发。判断节点是否存在直接用test="Period"即可,节点存在则返回真,不存在返回假。
  3. 变量取值错误:你定义的$period变量取的是绝对路径/Period,永远为空,后续判断完全没有意义,直接删除该变量即可。

修正后可正常运行的XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://exampleincludednamespace.com/"
exclude-result-prefixes="ns">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/">
    <Document>
        <xsl:for-each select="/Document/Row">
            <xsl:copy>
                <xsl:copy-of select="KEY" />
                <xsl:choose>
                    <xsl:when test="Period">
                        <xsl:copy-of select="Period" />
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:copy-of select="Matches/Row/Period" />
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:copy>
        </xsl:for-each>
    </Document>
</xsl:template>
</xsl:stylesheet>

输出结果

运行修正后的代码将得到你期望的输出:

<Document>
   <Row>
      <KEY>NIKE|JB|APPAREL|MENS</KEY>
      <Period>Nov-21</Period>
   </Row>
   <Row>
      <KEY>FASCINATE|JB|ACCESSORIES|LADIES</KEY>
      <Period>Nov-22</Period>
   </Row>
</Document>

内容的提问来源于stack exchange,提问作者Shawn de Wet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:06:05