xslt: удалить пробел до и после определенных элементов

Я использую Saxon PE 9.7, XSLT версия 3.0.

Я пытаюсь убрать пробел после <w> до <damage>. Я пробовал несколько решений: normalize-space(), translate(., ' ', ''), даже css, white-space: nowrap... Я также рассмотрел решение, предложенное для Как удалить пробелы во всех значениях атрибутов с помощью xslt?. К сожалению, ни один не работал.

TEI

<lg>
    <!-- other <l> -->
    <l>
        <!-- other <w> -->
        <w xml:id="ktu1-3_ii_l7_ym" type="noun" lemmaRef="uga/noun.xml#ym" rendition="#nowrap">y</w><damage agent="unknown"><supplied resp="KTU" rendition="#bracketBefore #bracketAfter"><w corresp="ktu1-3_ii_l7" type="part-of-noun">m</w></supplied></damage> <!-- type="part-of-noun" because I also have type="part-of-verb", and the display is different -->
    </l>
</lg>

Когда у меня damage/supplied/w перед вторым <w> работает, но не после первого <w>

XSLT

 <xsl:template match="lg/l[@n]">
    <li>
       <xsl:apply-templates/>
       <sup style="font-size: 0.8em">
            <a href="{@xml:id}" name="{@xml:id}" id="line"><xsl:value-of select="@n"/></a>
       </sup>
    </li>
</xsl:template>

 <xsl:template match="lg/l[@n]/damage/supplied">
    <xsl:choose>
        <xsl:when test="@rendition">
            <xsl:text>[</xsl:text> 
            <xsl:apply-templates select="./w[not(@rendition='notDisplay')]"/><xsl:text>]</xsl:text>                 
        </xsl:when><xsl:otherwise><xsl:apply-templates select="./w[not(@rendition='notDisplay')]"/></xsl:otherwise>
    </xsl:choose>       
</xsl:template>

<xsl:template match="w">
   <xsl:apply-templates select="normalize-space(.)"/>
</xsl:template>

<xsl:template match="lg/l[@n]/w"> 
    <xsl:apply-templates select=".[@type= 'noun']" mode="css"/>
    <xsl:apply-templates select="normalize-space(.)"/>
</xsl:template>

Заранее благодарим вас за ваш добрый совет.


person Vanessa    schedule 02.02.2018    source источник


Ответы (1)


У меня возникли проблемы с определением того, чего вы хотите достичь. Каков желаемый результат? Вы говорите о нежелательном пространстве в визуальном представлении HTML или о нежелательном пространстве в результате преобразования XML/HTML?

Письмо

<xsl:apply-templates select="normalize-space(.)"/>

явно неправильно, если у вас нет шаблонных правил, которые соответствуют атомарным значениям xs:string, что кажется маловероятным. И ни один из ваших элементов <w> не имеет пробелов в своих строковых значениях, поэтому normalize-space в любом случае не работает.

person Michael Kay    schedule 15.02.2018