更改属性值,但前提是子元素满足条件

Changing an attribute value, but only if child element fulfills condition

我有以下XML

<?xml version="1.0" encoding="UTF-8"?>
<entry>
   <cit>
      <level type="higher">
         <part>higher1</part>
         <part>higher2</part>
      </level>
      <level type="medium">
         <content>higher1 higher2</content>
      </level>
   </cit>
   <cit>
      <level type="higher">
         <part>higherA</part>
      </level>
      <level type="medium">
         <content>higherA</content>
      </level>
   </cit>
</entry>

我现在想将 level 元素的属性值从 "medium" 更改为 "lower",但前提是 content 子元素的内容包含两个或更多字词。

我的 XSL 文件 (XSLT 2.0)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
    <xsl:output method="xml" indent="yes" />
    <xsl:strip-space elements="*" />

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="cit/level/@type[.='medium']">
        <xsl:attribute name="{name()}">lower</xsl:attribute>
    </xsl:template>

</xsl:stylesheet>

更改所有 <level> 元素的属性值,无论它们包含多少个单词。我试图在模板匹配定义之后插入 <xsl:if test ...> 以识别 <level type="medium"> 内容中的任何空格,但无济于事。那么正确的做法是什么?

使用 tokenize 例如

<xsl:template match="cit/level[tokenize(content, '\s+')[2]]/@type[.='medium']">
    <xsl:attribute name="{name()}">lower</xsl:attribute>
</xsl:template>

在线 http://xsltransform.net/ncdD7md