XML/XSLファイルにXMLファイルを含める 質問する

XML/XSLファイルにXMLファイルを含める 質問する

そこで現在、XML-> XSLT-> (HTML5/CSS3) の作業を行っています。現在、menu.xml ファイルがあり、それを XSL ファイルまたは XML ページのいずれかに含めたいと思っています。いろいろ検索してみましたが、明確な答えが見つかりません。

では、XML ファイルを別の XML ファイルまたは XSL ファイルに含めるにはどうすればよいでしょうか?

編集: 含めるというのは、コピーして貼り付けたり、単に埋め込んだりするのではなく、別のファイルから参照/読み込むことを意味します。

ベストアンサー1

I. XML文書またはフラグメントをXSLTスタイルシートに埋め込み、変換時に使用する方法は次のとおりです。:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:my="my:my">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <my:menu>
   <menu>
     <choice>A</choice>
     <choice>B</choice>
     <choice>C</choice>
   </menu>
 </my:menu>

 <xsl:template match="/">
  <xsl:copy-of select="document('')/*/my:menu/*"/>
 </xsl:template>
</xsl:stylesheet>

この変換を任意のXML文書に適用すると(この例では使用されていません)、必要な結果(XMLのコピーのみ)が生成されます。:

<menu xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
   <choice>A</choice>
   <choice>B</choice>
   <choice>C</choice>
</menu>

覚えて: XML は、名前空間要素 (XSLT 名前空間ではなく名前空間) にラップされ、このラップ要素がグローバル レベル ((最上位) 要素の子) にある限り、XSLT スタイルシートに埋め込むことができます<xsl:stylesheet>

II. 別のXMLファイルにあるXMLメニューファイルにアクセスする:

これを実行するには、前の例を少しだけ変更する必要があります。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>


 <xsl:template match="/">
  <xsl:copy-of select="document('menu.XML')/*"/>
 </xsl:template>
</xsl:stylesheet>

メニューXMLファイルが'menu.XML'ファイル内にある場合(XSLTスタイルシートファイルと同じディレクトリ内)、この変換によってまったく同じ結果が生成されます。前述の通り:

<menu>
   <choice>A</choice>
   <choice>B</choice>
   <choice>C</choice>
</menu>

注意してください: どちらの場合も、標準のXSLT関数を使用していますdocument()

通常、関数を呼び出した結果の値であるグローバル レベルの変数を定義しますdocument()。その後、変換中に XPath 式を介してこの変数とその内容にアクセスします。

おすすめ記事