さて、これは私を狂わせています。XML ファイルといくつかの PHP を使用して単純な CMS を作成しようとしています。次のような XML ファイルがあります。
<?xml version="1.0" encoding="utf-8"?>
<sections>
<section name="about">
<maintext>
<p>Here is some maintext. </p>
</maintext>
</section>
<section name="james">
<maintext>
<p>Zippidy do.</p>
</maintext>
</section>
</sections>
次に、XSL ファイルです。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="section">
<div class="section">
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="maintext">
<xsl:copy-of select="child::node()" />
</xsl:template>
</xsl:stylesheet>
この変換は正常に機能します - 簡単な段落がいくつか得られます。
<p>Here is some maintext. </p>
<p>Zippidy do.</p>
ただし、XML をクエリし、GET パラメータに従って特定の「セクション」を取得する必要がある PHP ファイルがあります。次に、XML のその部分だけで変換を実行し、結果をエコーします。
<?php
$sectionName = $_GET["section"];
$content = new DOMDocument();
$content->load("content.xml");
$transformation = new DOMDocument();
$transformation->load("transform-content.xsl");
$processor = new XSLTProcessor();
$processor->importStyleSheet($transformation);
$xpath = new DOMXPath($content);
$sectionXML = $xpath->query("section[@name='".$sectionName."']")->item(0);
echo $processor->transformToXML($sectionXML);
?>
問題は、クエリで選択したセクションだけでなく、XML ファイル全体が変換されることです。ここで何が間違っているのですか?!