Проблема генерации повторяющихся строк и столбцов сетки Bootstrap с помощью XSLT - PullRequest
0 голосов
/ 01 февраля 2019

Я использую XSLT для генерации строк, столбцов и содержимого из файла конфигурации.У меня есть настройки строк / столбцов / содержимого конфигурации, но я не могу понять, как заставить XSLT повторять строки и столбцы, чтобы соответствовать моему ожидаемому выводу HTML.Это только тянет первый экземпляр каждой строки / Col / Box.Я знаю, что есть параметры, которые нужно передать, чтобы они повторялись правильно, но я не понимаю, как их правильно использовать.

XSLT-файл:

<xsl:template match="/XmlPages">
    <xsl:for-each select="/XmlPages/Page[@RouteUrl=$RouteUrl]">
        <xsl:apply-templates />
    </xsl:for-each>
</xsl:template> 

<xsl:template match="Row">      
    <div class="row content-row">
        <xsl:apply-templates select="Col" />
    </div>
</xsl:template>

<xsl:template match="Col">
    <div class="col-{@colSize} content-col">
        <xsl:apply-templates select="Box" />
    </div>
</xsl:template>

<xsl:template match="Box">      
    <div class="content-box {@boxBg}-bg" data-url="{@fileUrl}"></div>
</xsl:template>

Файл конфигурации:

<Page Name="testPage" RouteUrl="/testPage">
    <Row>
        <Col colSize="3">
            <Row>
                <Col colSize="12">
                    <Box boxBg="clear" fileUrl="/content/test-1.html"></Box>
                </Col>
            </Row>
            <Row>
                <Col colSize="12">
                    <Box fileUrl="/content/test-2.html"></Box>
                </Col>
            </Row>
            <Row>
                <Col colSize="12">
                    <Box fileUrl="/content/test-3.html"></Box>
                </Col>
            </Row>
        </Col>
        <Col colSize="9">
            <Row>
                <Col colSize="9">
                    <Box fileUrl="/content/test-4.html"></Box>
                </Col>
                <Col colSize="3">
                    <Row>
                        <Col colSize="12">
                            <Box boxBg="color" fileUrl="/content/test-5.html"></Box>
                        </Col>
                    </Row>
                    <Row>
                        <Col colSize="12">
                            <Box boxBg="color" fileUrl="/content/test-6.html"></Box>
                        </Col>
                    </Row>
                </Col>
            </Row>
            <Row>
                <Col colSize="12">
                    <Box fileUrl="/content/test-7.html"></Box>
                </Col>
            </Row>
        </Col>
    </Row>
</Page>

Желаемый результат HTML:

<div class="row content-row">
    <div class="col-3 content-col">
        <div class="row content-row">
            <div class="col-12 content-col">
                <div class="content-box clear-bg">
                </div>
            </div>
        </div>
        <div class="row content-row">
            <div class="col-12 content-col">
                <div class="content-box">
                </div>
            </div>
        </div>
        <div class="row content-row">
            <div class="col-12 content-col">
                <div class="content-box">
                </div>
            </div>
        </div>
    </div>
    <div class="col-9 content-col">
        <div class="row content-row">
            <div class="col-9 content-col">
                <div class="content-box">
                </div>
            </div>
            <div class="col-3 content-col">
                <div class="row content-row">
                    <div class="col-12 content-col">
                        <div class="content-box color-bg">
                        </div>
                    </div>
                </div>
                <div class="row content-row">
                    <div class="col-12 content-col">
                        <div class="content-box color-bg">
                        </div>
                    </div>
                </div>              
            </div>
        </div>
        <div class="row content-row">
            <div class="col-12 content-col">
                <div class="content-box">
                </div>
            </div>
        </div>
    </div>
</div>

1 Ответ

0 голосов
/ 01 февраля 2019

Вы забыли, что у ваших Col элементов также может быть Row детей.
Так что измените

<xsl:template match="Col">
  <div class="col-{@colSize} content-col">
    <xsl:apply-templates select="Box" />
  </div>
</xsl:template>

на

<xsl:template match="Col">
  <div class="col-{@colSize} content-col">
    <xsl:apply-templates select="Row|Box" />
  </div>
</xsl:template>

Это должно сработать.
Или создайте новый шаблон, если выходные данные должны отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...