检查XSLT中的值和条件

时间:2011-12-14 19:53:57

标签: xslt

正确地改述我的问题:

我有XSLT,我需要检查特定数据的节点值。 例如。 (伪代码):

If only H occurs then set target element value as 'H'
Else if
    Only B or N then set target element value as 'BN'

如果是源XML:

<n1>N</n1>
<n1>B</n1>
<n1>N</n1>

目标节点:     BN

如果是源XML:

<n1>H</n1>
<n1>H</n1>
<n1>H</n1>

目标节点:     ħ

没有属性。我只需要设置满足目标节点条件的文本。

我可以使用类似的东西:

<xsl:variable name="elements">
<xsl:for-each select="/test/elem">
<xsl:value-of select="."/>
<xsl:if test="position() < last()">
</xsl:if>
</xsl:for-each>
</xsl:variable>

以上是否给了我所有元素值的concat然后我可以检查一下是否包含x然后我可以做一个设置文本?

1 个答案:

答案 0 :(得分:1)

当这个样式表

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
    <xsl:variable name="value">
        <xsl:choose>
            <xsl:when test="/root[not(n1 != 'H')]">
                <xsl:value-of select="'H'"/>
            </xsl:when>
            <xsl:when test="/root[not(n1[. != 'B' and . != 'N'])]">
                <xsl:value-of select="'BN'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="'Something else'"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>
    <xsl:text>$value = </xsl:text>
    <xsl:value-of select="$value"/>
</xsl:template>
</xsl:stylesheet>

被赋予此输入

<root>
    <n1>H</n1>
    <n1>H</n1>
    <n1>H</n1>
</root>

它产生所需的输出

$value = H

类似
<root>
    <n1>N</n1>
    <n1>B</n1>
    <n1>N</n1>
</root>

<root>
    <n1>N</n1>
    <n1>N</n1>
    <n1>N</n1>
</root>

我们得到了

$value = BN

并且

<root>
    <n1>N</n1>
    <n1>B</n1>
    <n1>x</n1>
</root>

<root>
    <n1>N</n1>
    <n1>B</n1>
    <n1>H</n1>
</root>

我们得到了

$value = Something else

字符串HBNSomething else是变量的值。您可以将其设置为您创建的新元素的内容,而不仅仅是输出该变量的值。