Как разбить строку на несколько строк, но не разбивать слово в XSLT или REGEX - PullRequest
0 голосов
/ 22 января 2019

У меня есть XSL-файл с процессом xml to xml.В разделе «Заголовок» таблицы мне нужно отформатировать текст так же, как и ожидаемый результат, особенно переводы строк / разрывы.

Моя проблема в том, что нет точного соответствия, когда или где ставить новую строку, кроме количества столбцов.

Требования для этого:

1 .Должен иметь только один xsl-файл, потому что я запусту его через приложение saxon9he, которое я использую, но не создал.

2 .Решением является либо решение с помощью одного только xsl, либо использование динамического регулярного выражения.

3 .Необходимо отделить слово / слова от новой строки / перерывов, но не следует разбивать слово.

Насколько я знаю в XSLT, это всего лишь преобразование данных, означающее, что динамический источник не может обработать одинфайл.Так что я сосредоточен на регулярных выражениях.

У меня есть синтаксис, подобный \ b. {1,15} \ b | \ b \ S + \ b .Ожидаемый результат был идеальным, когда я тестировал его на сайте тестирования регулярных выражений, но, к сожалению, я получил ошибку, когда применил его в xsl, \ b (граница слова) не поддерживается XSLT 2.0 или SAXON9.

За исключением границы слова, lookahead и lookbehind не поддерживаются.

Пожалуйста, помогите мне подражать моему регулярному выражению или если есть альтернативный синтаксис для \ b, или если кто-нибудь знает, как справиться с этим только через XSLT.

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:xdt="http://www.w3.org/2005/xpath-datatypes"
    xmlns:err="http://www.w3.org/2005/xqt-errors"
    exclude-result-prefixes="xs xdt err fn">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <body>
            <xsl:for-each select="sst/si">
                <para>
                    <xsl:choose>
                        <xsl:when test="../NumberOfColumn = '15'">
                            <xsl:analyze-string select="t" regex="\b.{{1,15}}\b|\b\S+\b">
                                <xsl:matching-substring>
                                    <br />
                                    <text>
                                        <xsl:value-of select="regex-group(0)"/>
                                    </text>
                                </xsl:matching-substring>
                            </xsl:analyze-string>
                        </xsl:when>
                        <xsl:when test="../NumberOfColumn = '10'">
                            <xsl:analyze-string select="t" regex="\b.{{1,10}}\b|\b\S+\b">
                                <xsl:matching-substring>
                                    <br />
                                    <text>
                                        <xsl:value-of select="regex-group(0)"/>
                                    </text>
                                </xsl:matching-substring>
                            </xsl:analyze-string>
                        </xsl:when>
                        <xsl:otherwise>enter code here
                        ...
                        </xsl:otherwise>`enter code here`
                    </xsl:choose>
                </para>
            </xsl:for-each>
        </body>
    </xsl:template>

</xsl:stylesheet>

Ожидаемый результат:

<body>
    <para>
        <text>In the end of</text>
        <br/>
        <text>the road.</text>
    </para>
    <para>
        <text>It's</text>
        <br/>
        <text>incomprehensible</text>
        <br/>
        <text>to me that he</text>
        <br/>
        <text>could have</text>
        <br/>
        <text>acted that way.</text>
    </para>
    <para>
        <text>Unimaginatively</text>
        <br/>
        <text>has lots of</text>
        <br/>
        <text>vowels!!!</text>
    </para>
    <para>
        <text>An</text>
        <br/>
        <text>uncopyrightable</text>
        <br/>
        <text>song,</text>
    </para>
    <para>
        <text>but one other</text>
        <br/>
        <text>word without</text>
        <br/>
        <text>repeated</text>
        <br/>
        <text>letters is</text>
        <br/>
        <text>longer—subdermatoglyphic.</text>
    </para>
    <para>
        <text>A state where</text>
        <br/>
        <text>the inferior</text>
        <br/>
        <text>rays of the</text>
        <br/>
        <text>pectoral fins</text>
        <br/>
        <text>are entirely or</text>
        <br/>
        <text>partially</text>
        <br/>
        <text>detached from</text>
        <br/>
        <text>the body?</text>
    </para>
    <para>
        <text>Long-headed?</text>
    </para>
    <para>
        <text>The study of</text>
        <br/>
        <text>sociological</text>
        <br/>
        <text>codes...</text>
    </para>
    <para>
        <text>One nibbling a</text>
        <br/>
        <text>woman's</text>
        <br/>
        <text>earlobes</text>
    </para>
    <para>
        <text>1one? is not</text>
        <br/>
        <text>equal to</text>
        <br/>
        <text>17seventeen.</text>
    </para>
</body>
...