1

XML の XSL 変換からの HTML 出力に問題があります。XML では、段落の途中で改ページがあることがわかります。

. スタイルシートはこの時点で視覚的な改ページを挿入しますが、これにより段落全体の書式が崩れます。改ページの後に表示される行は正しくインデントされていますが、行間隔が狭すぎて、通常の段落と同じように見えます。大規模なオーバーホールなしでこれを修正する方法はありますか?

関連するすべてのコードを含めたと思います:

BEGIN XML

<floatingText xml:id="foo.001" type="bar">
<opener>
    <address>
        <addrLine>Address</addrLine>
        <addrLine>
            <date when="2017-04-26">April 26, 2017</date>
        </addrLine>
    </address>
    <salute>
        <hi rend="italic">Hello world.</hi>
    </salute>
</opener>
<body>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Pellentesque eget odio<pb type="recto" n="19"/> pellentesque, mollis 
mi et, malesuada
        est. Duis eleifend ullamcorper justo, vitae accumsan ante 
porta id.</p>
    <closer>
        <salute>Yours,</salute>
        <signed>Me</signed>
    </closer>
</body>
</floatingText>

XML の終了

XSL 変換の開始

<xsl:template match="pb[@n]">
<LEFT>
    <table>
        <tr>
            <td>&#160;</td>
        </tr>
        <tr>
            <td style="white-space: nowrap"> - - - - - - - - - - - - 
- - - - - -
                <font face="Arial" size="-2">
                    [Begin&#160;page&#160;<xsl:value-of select="@n"
                    />]</font> - - - - - - - - - - - - - - - - - - 
</td>
        </tr>
        <tr>
            <td height="10">&#160;</td>
        </tr>
    </table>
</LEFT>
</xsl:template>
<xsl:template match="p">
<xsl:choose>
    <xsl:when test="@rend = 'center'">
        <p/>
        <font face="Arial Unicode MS, sans-serif" size="-1">
            <center>
                <xsl:apply-templates/>
            </center>
        </font>
    </xsl:when>
    <xsl:otherwise>
        <font face="Arial Unicode MS, sans-serif" size="-1">
            <p/>&#160;&#160;&#160;&#160;&#160;<xsl:apply-templates/>
        </font>
    </xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="closer | opener | dateline">
<font face="Arial Unicode MS, sans-serif" size="-1">
    <blockquote>
        <xsl:apply-templates/>
        <br/>
    </blockquote>
</font>
</xsl:template>
<xsl:template match="salute | signed">
<font face="Arial Unicode MS, sans-serif" size="-1">
    <p/>
    <br/>
    <xsl:apply-templates/>
    <br/>
</font>
</xsl:template>
<xsl:template match="floatingText[@type = 'letter']">
<blockquote>
    <font face="Arial Unicode MS, sans-serif" size="-1">
        <xsl:apply-templates/>
    </font>
</blockquote>
</xsl:template>

XSL の終了

HTML出力開始

<font xmlns="" face="Arial Unicode MS, sans-serif" size="-1">
<blockquote>
    <font face="Arial Unicode MS, sans-serif" size="-1">
        <font face="Arial Unicode MS, sans-serif" size="-1">
            <blockquote>
                <font face="Arial Unicode MS, sans-serif" size="-1">
                    <br />Address
                </font>
                <font face="Arial Unicode MS, sans-serif" size="-1">
<br /> April 26, 2017.
                </font>
                <font face="Arial Unicode MS, sans-serif" size="-1">
<p /><br /> 
                    <font face="Arial, sans-serif"><i>Hello world.
</i>
                    </font><br />
                </font><br />
            </blockquote>
        </font>
        <font face="Arial Unicode MS, sans-serif" size="-1">
            <p />&#160;&#160;&#160;&#160;&#160;Lorem ipsum dolor sit 
amet, consectetur adipiscing elit. Pellentesque posuere, erat non 
commodo ornare, nunc nulla faucibus mauris, quis venenatis urna 
turpis eu lorem. Pellentesque eget odio
            <CENTER>
                <table>
                    <tr>
                        <td>&#160;
                        </td>
                    </tr>
                    <tr>
                        <td style="white-space: nowrap">
                            <font face="Arial" size="-2">
[dashes are here]&#160;begin&#160;page&#160;19&#160;[dashes are here]
                            </font>
                        </td>
                    </tr>
                    <tr>
                        <td height="10">&#160;
                        </td>
                    </tr>
                </table>
            </CENTER>
            pellentesque, mollis mi et, malesuada est. Duis eleifend 
ullamcorper justo, vitae accumsan ante porta id.
        </font>
        <font face="Arial Unicode MS, sans-serif" size="-1">
            <blockquote>
                <font face="Arial Unicode MS, sans-serif" size="-1">
<p /><br />Yours,<br /></font>
                <font face="Arial Unicode MS, sans-serif" size="-1">
<p /><br />Me<br />
                </font><br />
            </blockquote>
        </font>
    </font>
</blockquote>
</font>

END HTML

4

2 に答える 2

0

簡単な方法の 1 つは、 <p> 内のすべてのテキスト ノードを個別にレンダリングすることです。

<xsl:template match="p//text()">
    <font face="Arial Unicode MS, sans-serif" size="-1">
        <xsl:value-of select="."/>
    </font>
</xsl:template>

ただし、これはp、 などの他の子孫のレンダリングに影響を与える可能性がありますhi。そのような要素には別のテンプレートを導入する必要があります。

于 2017-05-26T09:53:51.963 に答える
0

@friedemann_bach のコメントを拡張するには、次のようにします。通常のテキスト フローにパイプ記号を挿入し、さらに div を挿入し、css を介して適切な場所 (左側の欄外列) に移動します。ここにxsltがあります:

<xsl:template match="pb">
    <xsl:choose>
        <xsl:when test="@break='no'">
            <xsl:text>|</xsl:text>
        </xsl:when>
        <xsl:otherwise>
            <xsl:text> | </xsl:text>
        </xsl:otherwise>
    </xsl:choose>
    <xsl:element name="div">
        <xsl:attribute name="class">pageNumbers</xsl:attribute>
        <xsl:value-of select="concat('p. ', @n)"/>
    </xsl:element>
</xsl:template>

そしてstyle.css:

.pageNumbers {
    float: left;
    margin-left: -12%;
    display: block;
}
于 2017-09-18T13:53:30.123 に答える