Серийный номер XSL-FO в заголовке - PullRequest
0 голосов
/ 21 января 2012

Входной XML:

<Data>
    <BPP>
        <CP>A</CP>
        <Name>Joe</Name>
    </BPP>
    <BPP>
        <CP>A</CP>
        <Name>Show</Name>
    </BPP>
    <BPP>
        <CP>B</CP>
        <Name>Cunny</Name>
    </BPP>
    <BPP>
        <CP>D</CP>
        <Name>Johny</Name>
    </BPP>
    <BPP>
        <CP>C</CP>
        <Name>Bunny</Name>
    </BPP>
    <BPP>
        <CP>B</CP>
        <Name>Sunny</Name>
    </BPP>
    <BPP>
        <CP>C</CP>
        <Name>Neha</Name>
    </BPP>
    <BPP>
        <CP>D</CP>
        <Name>Josh</Name>
    </BPP>
    <BPP>
        <CP>B</CP>
        <Name>Ash</Name>
    </BPP>
    <BPP>
        <CP>A</CP>
        <Name>Isha</Name>
    </BPP>
</Data>

Мой код в XSL-FO:

<fo:table table-layout="fixed" border-width="1mm" border-style="solid">
<fo:table-column column-width="25%"/>
<fo:table-column column-width="25%"/>
<fo:table-column column-width="25%"/>
<fo:table-column column-width="25%"/>
<fo:table-body>
<!-- Repeatable row-->
    <fo:table-row>
        <fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
            <fo:block font-weight="bold">Header</fo:block>
        </fo:table-cell>
        <fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
            **<fo:block font-weight="bold"><!--Serial Value of 'A' or 'B'--></fo:block>**
        </fo:table-cell>

        <fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
            <fo:block><xsl:value-of select='Data/BPP/Name'/></fo:block>
        </fo:table-cell>
        <fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
            <fo:block><xsl:value-of select='Data/BPP/CP'/></fo:block>
        </fo:table-cell>
    </fo:table-row>
</fo:table-body>
</fo:table>

Мое требование:

если Данные / BPP / CP ='A' или Data / BPP / CP = 'B' , затем в Каждая строка, 2-й столбец таблицы Серийный номер должен отображаться Результирующий вывод должен быть вследующий формат таблицы

Заголовок 1

Джо A


Заголовок 2

Показать A


Заголовок 3

Cunny B


Заголовок 4

Солнечный B


Заголовок 5

Ash B


Заголовок 6

Иша A


Как получить вышеуказанный серийный номер для «A» или «B» (не для «C», «D» и т. Д.))?Я пытался получить это с xslt , но мне не удалось.Любая помощь с xslt или xsl-fo в этом отношении действительно похвальна ..

1 Ответ

0 голосов
/ 30 января 2012

Я не могу проверить это, но попробуйте:

<xsl:for-each select="Data/BPP[./CP = 'A' or ./CP = 'B']">
    <xsl:number value="position()" format="1" />
</xsl:for-each>

(я отредактировал свой предыдущий ответ, так как он был неправильным. Теперь я понимаю ваш вопрос)

Приведенный выше XSL выберет все узлы BPP, где CP равен A или равно B. position() выведет позицию текущего узла. Я просто не уверен, будет ли он выводить позицию узла во всем списке узлов или в результате нашего for-each.

...