Код для правильного представления через prettyprint - PullRequest
0 голосов
/ 18 октября 2018

У меня проблема с представлением моего кода.Это корректно обрабатывается моим XSLT, но результат выглядит ужасно и не так, как ожидалось.Обычно, функция pretty-print работает отлично, но не после моих изменений, и я не знаю, что делать.Я думаю, что есть проблема с моим <xsl:apply-templates>, который я использую здесь.Есть ли способ получить красивый код после красивой печати?

Как примечание: я использую XSLT версии 1, и я пишу в Altova XMLSpy.

Это мой XML:

<University>
     <Students>
         <Info>Example 01</Info>
         <List>
             <ListEntry>
                 <Info>This is my first entry.</Info>
             </ListEntry>
             <ListEntry>
                 <Info>This is my second entry.</Info>
             </ListEntry>
         </List>
    </Students>
    <Students>
         <Info>Example 02</Info>
    </Students>
    <Students>
         <Info>Example 03</Info>
    </Students>
    <AlternativeStudents>
        <Students>
            <Info>Alternative Example 04</Info>
            <Info>Alternative Example 05</Info>
        </Students>
    </AlternativeStudents>
</University>

И это мой XSLT:

<!-- UNIVERSITY -->
<xsl:template match="University">
    <div data-class="greycontainer">
        <p data-role="heading">
            <xsl:text>STUDENTS</xsl:text>
        </p>
        <ul>
            <xsl:apply-templates/>
        </ul>
    </div>
</xsl:template>
<!-- STUDENTS -->
<xsl:template match="Students">
    <xsl:apply-templates/>
    <!-- "or" for AlternativeStudents -->
    <xsl:if test="following-sibling::*[1][self::AlternativeStudents]">
        <li class="parablock bold_">
            <xsl:text>or</xsl:text>
        </li>
    </xsl:if>
</xsl:template>
<!-- ALTERNATIVESTUDENTS -->
<xsl:template match="AlternativeStudents>
    <xsl:apply-templates/>
</xsl:template>
<!-- INFO IN LISTENTRY AND STUDENTS -->
<xsl:template match="ListEntry/Info | Students/Info">
    <xsl:choose>
        <!-- First -->
        <xsl:when test="name(preceding-siblings::*[1])!='Info'">
            <li>
                <xsl:apply-templates/>
            </li>
        </xsl:when>
        <!-- Following -->
        <xsl:otherwise>
            <li class="parablock">
                <xsl:apply-templates/>
            </li>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
<!-- LIST -->
<xsl:template match="List">
    <ul>
        <xsl:apply-templates/>
    </ul>
</xsl:template>
<!-- LISTENTRY -->
<xsl:template match="ListEntry>
    <xsl:apply-templates/>
</xsl:template>

И результат, как я уже сказал, правильный, это только отступы и представление.И вот как это должно выглядеть:

<div data-class="greycontainer">
    <p data-role="heading">STUDENTS</p>
    <ul>
        <li>Example 01</li>
        <ul>
            <li>This is the first entry.</li>
            <li>This is the second entry.</li>
        </ul>
        <li>Example 02</li>
        <li>Example 03</li>
        <li class="parablock bold_">or</li>
        <li>AlternativeExample 04</li>
        <li class="parablock">AlternativeExample 05</li>
    </ul>
</div>

Но на данный момент это выглядит так:

<div data-class="greycontainer"><p data-role="heading">STUDENTS</p><ul>

            <li>Example 01</li>
            <ul>

                    <li>This is the first entry.</li>


                    <li>This is the second entry.</li>

            </ul>


            <li>Example 02</li>


            <li>Example 03</li>
        <li class="parablock bold_">or</li>


                <li>AlternativeExample 04</li>
                <li class="parablock">AlternativeExample 05</li>


   </ul></div>

1 Ответ

0 голосов
/ 18 октября 2018

Если вы хотите иметь одинаковый отступ и не иметь смешанного ввода контента, то проще всего добавить как забор пробелов, так и отступ с помощью, например,

<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>

(метод вывода html - этодля этого не нужно, но ваш выходной формат выглядит как HTML, и поэтому вы можете получить лучшие результаты, если сообщите XSLT-процессору так, как известные встроенные элементы HTML или пустые элементы сериализуются в соответствии с правилами HTML, а не правилами XML).

Ваш пример на https://xsltfiddle.liberty -development.net / bdxtqK / 2 , похоже, выглядит хорошо с предложенным подходом.

...