如何将XSLT中的文本(元素属性)格式化为一行

问题描述 投票:0回答:1

有没有可以格式化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中,第一个元素在一行中具有属性。有什么帮助吗?谢谢。

xml xslt xslt-1.0 xslt-2.0 saxon
1个回答
0
投票

如果你正在使用Saxon,并指定indent =“yes”,那么如果行长度超过某个阈值,则属性被分成多行以便于阅读:缩进的陈述目的=“是”是为了使人类更容易读取输出,并且通常认为需要水平滚动的长行导致可读性差。

Saxon(PE和更高版本)允许您使用saxon:line-length序列化属性控制最大线长度,您可以在xsl:outputindent="yes"上指定该属性。

© www.soinside.com 2019 - 2024. All rights reserved.