3

このカタログ データを視覚化するための XML カタログ データと XSL ファイルがあります。この行を使用して XML を検証します。

<?xml-stylesheet type="text/xsl" href="presentation-list-catalog.xsl"?>

この部分はうまく機能します。

デザイナー用の秘密のリンクを用意したいのですが、何らかの形で別の XSL ファイルを使用して XML を検証する必要があります。基本的に、XSL ファイルへのリンクのみを変更する必要があります。

<?xml-stylesheet type="text/xsl" href="download-links-catalog.xsl"?>

この XSL ファイルは、デザイナーが高解像度のカタログ画像をダウンロードできるように、XML カタログ データを別の形で視覚化したものです。この目的のために、同じ XML を使用したいと思いますが、別のカスタム XSL ファイルを使用して変換します。

次のような HTTP リクエストを使用してカスタム XSL ファイルを指定することは可能ですか。

http://example.com/catalog.xml?download-links-catalog.xsl

可能な解決策は何ですか?

4

1 に答える 1

4

PHP を使用している場合、1 つの解決策は次のとおりです。

catalog.xml参照 URL に基づいて正しい XSL ファイルを提供する PHP ファイルを指定します。

このアイデアは、Ruby、ASP、JSP などの他のサーバーサイド スクリプトに移植できます。

カタログ.xml

ではcatalog.xml、XSL ファイルではなく、PHP ファイルを指定します。この例では、PHP ファイルはcatalog.php.

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="catalog.php"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
</catalog>

カタログ.php

catalog.php参照 URL に基づいて正しい XSL ファイルを提供します。

<?php
// Output the correct Content-Type, so that browsers know 
// to treat this file as an XSL document
header("Content-Type: text/xsl; charset=utf-8");

// Example $referer: http://example.com/catalog.xml?download-links-catalog.xsl
$referer = parse_url($_SERVER['HTTP_REFERER']);

// Example $query: download-links-catalog.xsl
$query = $referer['query'];

// If the file exists, serve up $query.
// If not, serve up the default presentation-list-catalog.xsl.
$xslFile = file_exists($query) ? $query : "presentation-list-catalog.xsl";
echo file_get_contents($xslFile);
?>

簡潔にするために、この例には一部のセキュリティ チェックが含まれていません。たとえば、それ$queryが実際に XSL ファイルであることを検証する必要があります。このチェックが行われないと、ハッカーがサーバー上の任意のファイルにアクセスする可能性があります。

プレゼンテーションリストカタログ.xsl

この XSL ファイルには何の変哲もありません。h2タグ内のテキストはPresentation List Catalog.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
  <h2>Presentation List Catalog</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

ダウンロード-リンク-catalog.xsl

この XSL ファイルは、タグpresentation-list-catalog.xsl内のテキストが.h2Download Links Catalog

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
  <h2>Download Links Catalog</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd">
    <tr>
      <td><xsl:value-of select="title"/></td>
      <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

何を期待します

上記のセットアップを使用して、に移動すると、 を使用してhttp://example.com/catalog.xml
サービスが提供されます。catalog.xmlpresentation-list-catalog.xsl

に移動すると、を使用してhttp://example.com/catalog.xml?download-links-catalog.xsl
サービスが提供されます。catalog.xmldownload-links-catalog.xsl

上記の XML ファイルと XSL ファイルの例は、W3Schools の記事「XSLT - 変換」から引用したものです。

于 2012-05-27T07:49:28.193 に答える