0

私の問題を説明するために、少しコンテキストを説明します。

私はこのような1つのxmlファイルと1つのxslファイルを持っています:

data.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="overview.xsl"?>
<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>

およびoverview.xsl:

<?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>My CD Collection</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>

Firefoxでdata.xmlを開くと、すべてが正常で、希望どおりに機能します。ここで、CDカタログを2回表示したいと思います。1つのビューは「概要」であり、もう1つは「拡張」です。つまり、2つの異なるxslが必要です。

私はこれを試しました:

view1.xml:

<?xml-stylesheet type="text/xsl" href="overview.xsl"?>
<xml-file href="data.xml" />

view2.xml:

<?xml-stylesheet type="text/xsl" href="extended.xsl"?>
<xml-file href="data.xml" />

そして私はこの行を削除しました:

<?xml-stylesheet type="text/xsl" href="overview.xsl"?>

data.xmlから

view1.xmlを読みながらoverview.xslでCDカタログを読み、view2.xmlを読みながらextended.xslの形式で同じCDカタログを読みたいと思っていました。

しかし、それは部分的にしか機能しません。どういうわけか私のoverview.xslはもうノードを見つけることができません。タイトルがabhtmlテーブルのWebページを取得しましたが、データがありません。私は、私は変更する必要があると思います:

<xsl:for-each select="catalog/cd">

他の何かに。何か考えはありますか?

情報として、私は別のxslファイルをロードするためにjavascriptを使用せずにこれを行おうとしています。

ご協力いただきありがとうございます。ジュリー

4

1 に答える 1

1

どこから着想を得たのかわかりませんが、<xml-file>私にとっては新しいものです。ただし、スタイルシートで処理することで機能させることができます。

<xsl:template match="xml-file">
  <xsl:apply-templates select="document(@href)/catalog"/>
</xsl:template>

いずれかのドキュメントのルートに一致するようになった match="/" テンプレートには注意してください。これにより、簡単に無限再帰が発生する可能性があります。

物事がさらに複雑になった場合に行う必要がある別の方法は、xml-stylesheet 処理命令を使用する代わりに、クライアント側 Javascript を記述して変換を呼び出すことです。

于 2012-04-15T21:48:06.247 に答える