如何为每个人获得超出功能的价值

时间:2011-08-18 08:51:17

标签: xslt

我很难从这个xml中获取数据:

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <AAA>Header</AAA>
    <BBB>
        <CCC>
            <DDD>
                <EEE>123123</EEE>
                <FFF>
                    <GGG>
                        <HHH>Body</HHH>
                        <III>1</III>
                    </GGG>
                    <GGG>
                        <HHH>Body</HHH>
                        <III>3</III>
                    </GGG>
                </FFF>
            </DDD>
        </CCC>
        <CCC>
            <DDD>
                <EEE>234234</EEE>
                <FFF>
                    <GGG>
                        <HHH>Body</HHH>
                        <III>2</III>
                    </GGG>
                    <GGG>
                        <HHH>Body</HHH>
                        <III>4</III>
                    </GGG>
                    <GGG>
                        <HHH>Body</HHH>
                        <III>6</III>
                    </GGG>
                </FFF>
            </DDD>
        </CCC>
        <CCC>
            <DDD>
                <EEE>345345</EEE>
                <FFF>
                    <GGG>
                        <HHH>Body</HHH>
                        <III>7</III>
                    </GGG>
                </FFF>
            </DDD>
        </CCC>
    </BBB>
</document>

需要的结果应该是:

Header;
Body;1;123123
Body;3;123123
Body;2;234234
Body;4;234234
Body;6;234234
Body;7;345345

我的xslt看起来:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="text" encoding="Windows-1257" indent="yes"/>    

<xsl:template match="/">
        <!--Start Header--><xsl:value-of select="document/AAA"/><xsl:text>;</xsl:text>
        <!--End Header--><xsl:text>&#013;&#010;</xsl:text>  
        <xsl:for-each select="document/BBB/CCC/DDD/FFF/GGG">            
            <!--Start Body--><xsl:value-of select="HHH"/><xsl:text>;</xsl:text>
            <xsl:value-of select="III"/><xsl:text>;</xsl:text>
            <xsl:value-of select="../EEE"/><--This doesn't work-->
            <!--End Body--><xsl:text>&#013;&#010;</xsl:text>
        </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

现在我有从EEE标签获取价值的问题。请帮助解决它,因为我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

从您的for-each语句中,您当前处理的上下文为document/BBB/CCC/DDD/FFF/GGG

EEE语句的完整路径为document/BBB/CCC/DDD/EEE

因此,您需要返回两个级别才能从EEE节点到达GGG节点:

<xsl:value-of select="../../EEE"/>