0

XSL-FOとFOPを使用してPDFを生成しています。複雑なHTMLページをPDFに変換中です。

次のエラーが発生しました。

不明なフォーマットオブジェクト"{}br"が見つかりました(pの子)。(利用可能なコンテキストはありません)

FOPプロセッサは、私が提供しているXSL-FOの形式を理解していません。これは、まだいくつかのHTMLタグが含まれているためです。以下にリンクされているxmlでフィルター<p>とタグを付けたいと思います。<br/>

http://www.tekstenuitleg.net/xmlinput.xml

最後のビットでは、「タブ要素1」と「タブ要素2」の下に、FOPが理解していないことが表示<p><br/>れます。

これらをXSLTでフィルターで除外し、に置き換えるのを手伝ってもらえます<fo:block>some replacement here</fo:block>か?さまざまなXSLTスタイルシートを試しましたが、うまくいきません。XSLTを最初の状態に戻しました。以下のXSLTは失敗しませんが、変換も行いません。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="no"/>
    <xsl:template match="/">
        <xsl:copy-of select="*"/>
    </xsl:template>
</xsl:stylesheet>

ソースXMLのタグ<p>とタグを置き換えるには、このXSLTに何を追加する必要がありますか?<br>

4

3 に答える 3

1

物理的な P/BR タグを削除したいが、その内容は保持したいという意味だと思います。

その場合は、この XMLPlayground セッションを参照してください (出力ソースの XML を参照してください)。

http://www.xmlplayground.com/9OE0NI

反復テンプレートは、次の 2 つのいずれかを行います。

  • 現在のノードが P/BR の場合、タグではなくその内容のみを出力します
  • それ以外の場合は、タグとコンテンツを出力します

...次に、子ノードを再帰します。

于 2012-06-08T14:47:52.133 に答える
0

要素ごとにテンプレートが必要です。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="no"/>
    <xsl:template match="p">
        <xsl:copy-of select="*" />
    </xsl:template>
    <xsl:template match="br">
        <!-- -->
    </xsl:template>
</xsl:stylesheet>
于 2012-06-08T14:44:54.900 に答える
0

興味のある方のために、これは私が置き換え<br><p>タグ付けするために使用する XSL です。xmlns:fo="http://www.w3.org/1999/XSL/Format が必要です。XSLFO を次のように出力します。<fo:block>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
    <xsl:apply-templates select='*' />
</xsl:template>

<xsl:template match='*'>
    <xsl:choose>
        <xsl:when test='name() = "p"'>
            <fo:block>
              <xsl:value-of select='.' />
            </fo:block>
        </xsl:when>
        <xsl:when test='name() = "br"'>
             <fo:block></fo:block>
        </xsl:when>
        <xsl:otherwise>
            <xsl:copy select='.' />
        </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates select='*' />
</xsl:template>

于 2012-06-08T15:37:46.253 に答える