我有以下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>
我现在想要从&#34; medium&#34;更改level
元素的属性值。到&#34;降低&#34;,但仅当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">
内容中的任何空格,但无济于事。那么这样做的正确方法是什么?
答案 0 :(得分:1)
使用tokenize
例如
<xsl:template match="cit/level[tokenize(content, '\s+')[2]]/@type[.='medium']">
<xsl:attribute name="{name()}">lower</xsl:attribute>
</xsl:template>