Как я могу удалить дополнительное пространство, генерируемое, когда я применяю шаблон в XSLT? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть этот XML-файл:

<mixed-citation >
    <collab>American Indian Research and Policy Institute.</collab>
    (<year>2000</year>).
    <source>
        <bold>To build a bridge: An introduction to working with American Indian communities</bold>
    </source>
</mixed-citation>

, и у меня есть этот XSL:

<xsl:template match="mixed-citation">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="year">
    <span class="references__{name()}">
        <xsl:apply-templates/>
    </span>
</xsl:template>


<xsl:template match="source">
    <span class="references__{name()}">
        <strong>
            <xsl:value-of select="."/>
        </strong>
    </span>
</xsl:template>

проблема заключается в том, что при применении этого правила XSLT сохранение результата генерируется с дополнительным пространством, которое я могуНе знаю, откуда это, это результат:

Институт исследований и политики американских индейцев (2000).Чтобы построить мост: введение в работу с общинами американских индейцев

дополнительное пространство между годом и левой круглой скобкой, может кто-нибудь сказать мне, откуда это дополнительное пространство, икак я могу удалить это, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Как уже упоминалось в посте @ Valdi_Bo, пробелы взяты из символов новой строки.Чтобы избавиться от новых строк, добавьте этот код поверх документа xsl:

<xsl:strip-space elements="*"/>

или, если вы хотите указать целевой элемент:

<xsl:strip-space elements="mixed-citation"/>

, вы можете добавить имена узловтам просто ставьте пробел после каждого имени узла.

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

Причина в том, что после </collab> ваш исходный XML фактически содержит текстовый узел, содержащий символ новой строки, 4 пробела и ( (и после этого year элемент).

Эти "невидимые" символы отображаются в HTML как один пробел.

Одним из возможных решений является добавление шаблона, соответствующего text(), и создание выходных данных с раздетым начальным / конечным "белым""chars:

<xsl:template match="text()">
    <xsl:value-of select="normalize-space()"/>
</xsl:template>

На самом деле, normalize-space() также меняет каждую последовательность" белых "символов в середине текстового узла на один пробел.

Возможно, вам также следует добавить <xsl:strip-space elements="*"/> в начале вашего сценария XSLT (на самом деле, после xsl:output).

Но учтите, что это изменение также уберет пробел между bridge: и Введение ... .

Чтобы оставить это место, вы должны добавить его явно.Просто добавьте <xsl:text> </xsl:text> перед <strong>, и ваш вывод будет в порядке.

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