更改属性值,但前提是子元素满足条件
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>
我有以下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>