как получить значение, которое выше функции для каждого - PullRequest
1 голос
/ 18 августа 2011

Я застрял на получении данных из этого 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 Ответ

1 голос
/ 18 августа 2011

Из вашего оператора for-each текущий контекст, с которым вы работаете, является document/BBB/CCC/DDD/FFF/GGG.

Полный путь к оператору EEE: document/BBB/CCC/DDD/EEE.

Поэтому вынеобходимо вернуться на два уровня, чтобы достичь узла EEE из узла GGG:

<xsl:value-of select="../../EEE"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...