2011-01-16 10 views
1

PHPを使用したXSLをHTML出力に処理しています。ここまでは順調ですね。ここに私のコードです。XSLTプロセッサで処理する前にXMLのサブツリーを抽出する必要があります

<?php 

$xslDoc = new DOMDocument(); 
$xslDoc->load("content.xsl"); 

$xmlDoc = new DOMDocument(); 
$xmlDoc->load("content.xml"); 

    // some xpath/dom-query filtering to get 
    // subtree of loaded xml-file 

$proc = new XSLTProcessor(); 
$proc->importStylesheet($xslDoc); 
echo $proc->transformToXML($xmlDoc); 

?> 

ご覧のとおり、これは単純なXSLTプロセッサです。出力はうまくいく。たとえば、私は与えられたXML内に3つの兄弟ノード「ノード」を持っています:

<root> 
<node> 
    <subnode>..</subnode> 
</node> 
<node> 
    <subnode>..</subnode> 
</node> 
<node> 
    <subnode>..</subnode> 
</node> 
</root> 

これで、2番目のノードをXMLプロセッサに渡したいだけです。

どうすればいいですか?あなたが$xmlDoc->getElementsByTagName('node')->item(1)にアクセスし、transformToDocにそれを渡した後、saveXMLを使用するか、saveHTMLできるようhttp://www.php.net/manual/en/xsltprocessor.transformtodoc.phpによると

クリス

+3

は私が求めることができますか? –

+0

両方のアプローチがどのように機能するか知りたい。私はすでにXSLTの方法を知っていて、そこから抽出します。 – ChrisBenyamin

答えて

1

自分の仕事を自分で解決しましたが、お申し込みいただきましてありがとうございます。ここで

は私のコードです:あなたはXSLTに渡すのではなく、それを抽出するためにXSLTを使用する前に、ノードを抽出する必要がある理由

$xmlDoc = new DOMDocument(); 
$xmlDoc->preserveWhiteSpace = false; 
$xmlDoc->load("content.xml"); 

$xpath = new DOMXPath($xmlDoc); 
$query = '//ContentData/Content[1]/Headline'; 
$nodeList = $xpath->query($query); 


$newDom = new DOMDocument('1.0','UTF-8'); 
$root = $newDom->createElement('root'); 
$root = $newDom->appendChild($root); 


foreach ($nodeList as $domElement){ 
    $domNode = $newDom->importNode($domElement, true); 
    $root->appendChild($domNode); 
} 

$newDom->saveXML(); 


$xslDoc = new DOMDocument(); 
$xslDoc->load("content.xsl"); 

$proc = new XSLTProcessor(); 
$proc->importStylesheet($xslDoc); 

echo $proc->transformToXML($newDom);  
2

は、transformToDoc方法はに応じて、XMLまたはHTMLの文字列を取得するには、引数として任意のDOMノードを取りますどのような結果があなたを探していますか?

+0

+1良い答え。 –

関連する問題