XSLTProcessor
transformToDoc
メソッドは、パラメータとしてDOMNode
が必要です。だから私はDOMDocument
をロードし、そこからノードを取得して(例えばDOMXPath
経由で)、それをXSLTに渡してそのノードのみを変換し、何も無視する(つまり出力しない)ことができると考えました。しかし...どのようにノードをターゲットにしますか?方法がありますか、または私はこの仕組みがどういうふうに誤解していますか?XSLTで渡されたPHPのコンテキストノードをどのように対象にしますか?
A <xsl:template match="/">
は、(私は子ノードに渡していても)文書のルート・ノードに一致し<xsl:template match=".">
が事のクラッシュを行い、<xsl:template match="name-of-passed-node">
が一致しませんが、デフォルトのXSLのような、それがテキストとしてアウト渡され、「上」のすべて(します)...
このPHP与えられた:
// Load input document
$doc = new DOMDocument;
$doc->load('some.xml');
// Find the context node we want to transform
$xpath = new DOMXPath($doc);
$node = $xpath->query('//some-node')->item(0);
// Load XSLT document
$xsl = new DOMDocument;
$xsl->load('some.xsl');
// Do transformation
$x = new XSLTProcessor();
$x->importStylesheet($xsl);
$result = $x->transformToDoc($node);
は、どのように私は、私のXSLTで与えられたノードをターゲットI出力するようにとだけそのノードとその子孫を変換するのですか?私はそれを実行しているいくつかのテストで
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match=" ? ">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
ああ、あまりにも悪いです。ああ、ダミーのドキュメントの回避策はOKソリューションのように見えるので、Xsltヘルパークラスに追加します。ありがとう! – Svish