XSL:选择当前节点

时间:2015-01-21 10:45:29

标签: xslt xslt-2.0

由于for-each,我正在尝试通过一组节点,并且当这个节点中的参数验证很少的条件时,我想在变量中选择当前节点。 问题是它似乎选择了节点中的值,而不是实际节点本身。我希望以后能够将此变量用作节点集。

XML($ parameterFile):

<?xml version="1.0" encoding="UTF-8"?>
    <Cases>
            <Case>
                <Rule LineNumber="10" PartNumber="FT40X40"/>
                <Template>
                    <Drawings>
                        test
                    </Drawings>
                </Template>
            </Case>
            <Case>
                <Rule LineNumber="10" PartNumber="FT40X46k"/>
                <Template>
                    <Drawings>
test2
                    </Drawings>
                </Template>
            </Case>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="xs"
version="2.0">
<xsl:variable name="GoodCase">
    <xsl:for-each select="$parameterFile/Cases/Case">
        <xsl:choose>
                <xsl:when test="(Rule/@LineNumber = $markerNbLines) and 

(Rule/@PartNumber = $markerPartNumber)">
                    <xsl:value-of select="current()"/>
                </xsl:when>
            </xsl:choose>
        </xsl:for-each>
    </xsl:variable>

    <xsl:for-each select="$parameterFile/$GoodCase/Template/Drawings">
        test
    </xsl:for-each>

预期输出:

test

谢谢!

1 个答案:

答案 0 :(得分:0)

  

pb [问题?]是它似乎选择了节点中的值,而不是   实际节点本身。

嗯,你 使用:

<xsl:value-of select="current()"/>

所以这是唯一的预期。您可以使用<xsl:copy-of>来编写整个节点。但是,生成的变量将包含结果树片段,而不是节点集,因此如果:

  

我希望以后可以将此变量用作节点集。

以这种方式填充变量会更好(未经测试,因为部分代码无法进行测试):

<xsl:variable name="GoodCase" select="$parameterFile/Cases/Case[Rule/@LineNumber=$markerNbLines and Rule/@PartNumber=$markerPartNumber]"/>

它只存储对原始节点的引用,因此它本身就是一个节点集。