XSLTを使用するのはこれが初めてです。使用しているプログラムからエクスポートしたXMLデータファイルをHTMLレポートに変換するファイルを作成しようとしています。
要素の値の1つは画像ファイルへのパスですが、生成されるパスは次のような絶対パスです。
C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg
しかし、ファイル名だけへの相対パスが必要です。
XLSTファイルを介してファイル名を解析する方法はありますか?
XPathには、別の文字列が最初に出現しsubstring-after
た後に文字列を返す関数が含まれています。これだけでは十分ではありませんが、次のようなテンプレートで十分な場合があります。
<xsl:template name="filename-only">
<xsl:param name="path" />
<xsl:choose>
<xsl:when test="contains($path, '\')">
<xsl:call-template name="filename-only">
<xsl:with-param name="path" select="substring-after($path, '\')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$path" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
使用可能な文字列関数のセットはそれほど広範囲ではありませんが、XSLTで必要となるほとんどのアプリケーションには十分であることがわかりました。
これは質問の範囲を少し超えていますが、Michael Kayは、 XSLT2を使用して純粋なテキストをXMLに解析することに関する優れた論文を持っています。
はい、XSLT 2.0に実装されている一般的なLR(1)パーサーを参照してください。(ちょうど245行で)。
JSON用のパーサーとXPath2.0用のパーサーを完全にXSLTで実装しました。
XPath 2.0とそのさまざまな文字列関数を使用したXSLTは、この種の処理に役立ちます。
例:
問題の[jpgファイルへの]パスが次のようなxmlスニペットからのものであると仮定します
...
<For_HTML>
<Image1>
<Path>C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg</Path>
<Description>Photo of the parking lot</Description>
<Width>123</Width>
...
</Image1>
</For_HTML>
XSLTスニペットは次のようになります
<xsl:template match='//For_HTML/Image1'>
<img src='http://myNewServer.com/ImageBin/{substring-after(./Path,"\xml export\")}'
alt='{./Description}'
width=' .... you got the idea'
/>
</xsl:template>
注:テストする時間がありませんでした。しかし、それはほぼ正しいように見えます。
可能です。次のスクリプトを開発しました:http: //barsand.wordpress.com/2012/06/19/can-an-xslt-parse-a-string-of-text/