我很抱歉,如果这是重复的,但我对XSL知之甚少,所以我没有应用我找到的其他答案。
<node>
<xsl:attribute name='TEXT'><xsl:value-of select='@text' /></xsl:attribute>
<richcontent TYPE="NOTE"><xsl:value-of select='@_note' /></richcontent>
</node>
所以我需要的是,如果原始文档中存在<richcontent>
元素,则仅创建@_note
标记 。如果不存在,我不想在新文档中创建<richcontent>
标记。
我怀疑我需要“什么时候”之类的东西,但我不确定如何使用它。当我尝试以下
<node>
<xsl:when test='@_note'>
<richcontent TYPE="NOTE"><xsl:value-of select='@_note' />
</richcontent>
</xsl:when>
</node>
我收到此错误
element when is not allowed within that context
答案 0 :(得分:1)
您看到的错误会被抛出,因为xsl:when
必须是xsl:choose
的孩子。
在您的情况下,当您没有其他xsl:when
或xsl:otherwise
说明时,您应该使用xsl:if
代替。
或者(也许最好),您可以使用与相关节点匹配的模板:如果该节点不存在,则不会应用该模板,并且不会创建新元素。
答案 1 :(得分:0)
可能没有@_node
元素,因为它不是valid QName,因为它以&#39; @&#39;开头。字符。 QNames只能以:
,_
,A-Z
,a-z
或上述链接中描述的一些UniCode字符开头。
您的<xsl:when>
解决方案无效,因为<xsl:when>
仅在<xsl:choose>
的上下文中有效:
<node>
<xsl:choose>
<xsl:when test='@_note'>
<richcontent TYPE="NOTE">
<xsl:value-of select='@_note' />
</richcontent>
</xsl:when>
</xsl:choose>
</node>
但您需要将元素@_note
重命名为符合QName规范的内容。