7

XSLTを使用するのはこれが初めてです。使用しているプログラムからエクスポートしたXMLデータファイルをHTMLレポートに変換するファイルを作成しようとしています。

要素の値の1つは画像ファイルへのパスですが、生成されるパスは次のような絶対パスです。

C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg

しかし、ファイル名だけへの相対パスが必要です。

XLSTファイルを介してファイル名を解析する方法はありますか?

4

5 に答える 5

12

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で必要となるほとんどのアプリケーションには十分であることがわかりました。

于 2009-10-14T23:30:24.323 に答える
2

これは質問の範囲を少し超えていますが、Michael Kayは、 XSLT2を使用して純粋なテキストをXMLに解析することに関する優れた論文を持っています。

于 2009-10-15T02:28:50.283 に答える
2

はい、XSLT 2.0に実装されている一般的なLR(1)パーサーを参照してください。(ちょうど245行で)。

JSON用のパーサーとXPath2.0用のパーサーを完全にXSLTで実装しました。

于 2009-10-16T13:14:55.517 に答える
0

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>

注:テストする時間がありませんでした。しかし、それはほぼ正しいように見えます。

于 2009-10-14T23:17:18.243 に答える
0

可能です。次のスクリプトを開発しました:http: //barsand.wordpress.com/2012/06/19/can-an-xslt-parse-a-string-of-text/

于 2013-07-13T16:48:07.063 に答える