私はこれと似たような質問を見てきましたが、これとまったく同じではありませんが、これが私がやろうとしていることです。SMSからXMLを取得し、そこからPDFログを作成します。よく働く。この新しい要素を追加しようとしましたが、XSLTの「置換」機能で文字を置換するようになりましたが、代わりに、変数を使用して外部グラフィックを配置したいと思います。XSLT変数の内容をFOドキュメントに直接貼り付けると、問題なくPDFが生成されますが、タグと内容がFOファイルに渡されません。簡単なものが欠けていると思います。
XMLスニペット:
<?xml version="1.0" encoding="UTF-8"?>
<SMSExport>
<SMSMessage>
<Kind>Sent</Kind>
<DateTime>2011-11-08 12:14:23 -0800</DateTime>
<Name>Sendee's name</Name>
<Number>+15553009008</Number>
<Message>Yay!!! - </Message>
</SMSMessage>
</SMSExport>
XMLスニペット:
<xsl:if test="not(following-sibling::Message/@File)">
<!-- Needs rework!!! "Graphic not taking -->
<xsl:variable name="emoji">
<fo:external-graphic src="emoji/emoji-E057.png"
content-height=".15in"/>
</xsl:variable>
<!-- Repeat added, to show a string replace works -->
<xsl:value-of select="replace(following-sibling::Message, '', ';-)')"/>
<fo:block/>
<xsl:value-of select="replace(following-sibling::Message, '',$emoji)"/>
</xsl:if>
結果のFOブロックスニペットを次のように表示します。
<fo:block start-indent=".35in" end-indent=".25in" keep-with-next="always">
Yay!!! ;-) - ;-);-);-)
<fo:block/>
Yay!!! -
</fo:block>
前もって感謝します!
追加:(LarsHの回答を使用して、再帰を処理した方法を次に示します。他の誰かに役立つことを願っています。
文字列を再帰的に処理するために、新しい正規表現を使用して上のブロックに貼り付け続けました。これは分析の個別のインスタンスを配置していたので、新しいアイテムを置き換えるたびに、行を繰り返し続けました。つまり、3つのブロックで、3つのアイテム(X、Y、Z)を検索します。
This is the result of (x.gif)YZ.
This is the result of X(y.gif)Z.
This is the result of XY(z.gif).
私が欲しかったものの代わりに、それは:
This is the result of (x.gif)(y.gif)(z.gif).
他の人にとっては、これを処理するには、一致しないものを置き換えるだけです
<xsl:copy-of select="."/>
次のanalyzeブロックをネストした行(この例では、空のボックスを避けるために、絵文字を16進値に置き換えました)。ここでは2つのアイテム/レベルに対してのみ実行しましたが、ネストを続行するだけで、うまく機能します。
<xsl:analyze-string select="following-sibling::Message" regex="">
<xsl:matching-substring>
<xsl:copy-of select="$E057"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:analyze-string select="." regex="">
<xsl:matching-substring>
<xsl:copy-of select="$E120"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:copy-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:non-matching-substring>
</xsl:analyze-string>