Как отформатировать текст (атрибуты элементов) в XSLT в одну строку - PullRequest
0 голосов
/ 24 марта 2019

Есть ли функция, которая может отформатировать файл xslt.Я думаю, что он, вероятно, будет использовать где-то в начале.В чем моя проблема?

Я создал базовый xslt:

 ...<xsl:template name="model"  match="uml:Model">
        <xsl:element name="uml:Model">
            <xsl:attribute name="xmi:type">
              <xsl:value-of select="@xmi:type"/>
            </xsl:attribute>
            <xsl:attribute name="name">
              <xsl:value-of select="@name" />
            </xsl:attribute>
            <xsl:attribute name="visibility">
              <xsl:value-of select="@visibility" />
            </xsl:attribute>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="packagedElement[@xmi:type='uml:Package']">
        <xsl:element name="packagedElement">
            <xsl:attribute name="xmi:type">uml:Package</xsl:attribute>
            <xsl:attribute name="xmi:id">
                <xsl:value-of select="@xmi:id"></xsl:value-of>
            </xsl:attribute>
            <xsl:attribute name="name">sequenceD</xsl:attribute>
            <xsl:attribute name="visibility">public</xsl:attribute> 
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>...

В первом шаблоне все в порядке, атрибуты элемента находятся в одной строке.В каждом следующем элементе есть атрибуты в собственной строке.Я не знаю почему. Это вывод XML:

<uml:Model xmi:type="uml:Model" name="EA_Model" visibility="public">
      <packagedElement xmi:type="uml:Package"
                       xmi:id="EAPK_9E00FA41_6F28_4e47_9AE6_2A04EE92CDBB"
                       name="sequenceD"
                       visibility="public"/>
</uml:Model>

И это то, что я ожидаю:

   <uml:Model xmi:type="uml:Model" name="EA_Model" visibility="public">
      <packagedElement xmi:type="uml:Package" xmi:id="EAPK_9E00FA41_6F28_4e47_9AE6_2A04EE92CDBB" name="sequenceD" visibility="public">
         <packagedElement xmi:type="uml:Collaboration" xmi:id="EAID_AC000001_6F28_4e47_9AE6_2A04EE92CDBB" name="EA_Collaboration1" visibility="public">
         </packageElement>
      </packageElement>
   </uml:Model>

Я также пытаюсь добавить собственный текст в первый шаблон, как во второмшаблон, но с тем же результатом.В xml первый элемент имеет атрибуты в одной строке.Любая помощь, пожалуйста?Спасибо.

1 Ответ

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

Если вы используете Saxon и задаете indent = "yes", то атрибуты разбиваются на несколько строк для удобства чтения, если длина строки в противном случае превысила бы некоторый порог: заявленная цель indent = "yes" - сделать этолюдям легче читать вывод, а длинные строки, требующие горизонтальной прокрутки, как правило, приводят к плохой читаемости.

Saxon (PE и выше) позволяет вам контролировать максимальную длину строки, используя свойство сериализации saxon:line-length, который вы можете указать на xsl:output рядом с indent="yes".

...