2

さて、これは私を狂わせています。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 ファイル全体が変換されることです。ここで何が間違っているのですか?!

4

1 に答える 1

1

transformToXMLDOMDocumentノードだけでなく、が必要です。現在のコードで行っていることは、渡したノードの「所有者ドキュメント」を変換していると思います。

新しいドキュメントを作成して$newDoc->appendChild($newDoc->importNode($sectionXML, true))から、既存の要素を新しいドキュメントに添付してから、元のドキュメントの代わりにこのドキュメントを変換してみてください。

于 2012-11-25T22:02:09.790 に答える