2011-06-20 18 views
1

私はxpathでクエリを実行しようとしているXSLTProcessorで結果ノードを実行しようとしているXMLドキュメントを持っています。 xpathクエリは正常に動作しますが、XSLTProcessorでSimpleXMLElementを使用する方法を理解できません。どんな助けもありがとう。SimpleXML XpathクエリとtransformToXML

$data = simplexml_load_file('document.xml'); 
$xml = $data->xpath('/nodes/node[1]'); 
$processor = new XSLTProcessor; 
$xsl = simplexml_load_file('template.xsl'); 
$processor->importStyleSheet($xsl); 
echo '<div>'.$processor->transformToXML($xml).'</div>'; 

XML:

<nodes> 
    <node id="5"> 
     <title>Title</title> 
    </node> 
</nodes> 

XSL:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="//node"> 
<xsl:value-of select="@id" /> 
<xsl:value-of select="title" /> 
... 

答えて

0

私はそれが(SimpleXMLElement::xpath製)の配列ですので、あなたは、その$xmlXSLTProcessor::transformToXMLにメソッドを渡すことができないと思う:

PHP警告: XSLTProcessor :: transformToXml() はそのための簡単な救済策がちょうどにXPath式を置くことです ライン上/var/www/index.phpに与えられた アレイ11

、パラメータ1が対象であることを期待しますXSLスタイルシート:

<xsl:output method="html"/> <!-- don't embed XML declaration --> 

<xsl:template match="/nodes/node[1]"> 
    <xsl:value-of select="@id"/> 
    <xsl:value-of select="title"/> 
</xsl:template> 

と:

$xml = simplexml_load_file('document.xml'); 
$xsl = simplexml_load_file('template.xsl'); 

$xslt = new XSLTProcessor; 
$xslt->importStyleSheet($xsl); 

echo '<div>'.$xslt->transformToXML($xml).'</div>'; 

EDIT:

もう一つの方法は、(それがnullではないことを確認してください)だけ変換XSLで、配列の最初の要素を使用することです:

$data = simplexml_load_file('document.xml'); 
$xpath = $data->xpath('/nodes/node[1]'); 
$xml = $xpath[0]; 

$xsl = simplexml_load_file('template.xsl'); 

$xslt = new XSLTProcessor; 
$xslt->importStyleSheet($xsl); 

echo '<div>'.$xslt->transformToXML($xml).'</div>'; 

と:

<xsl:template match="node"> 
    <xsl:value-of select="@id"/> 
    <xsl:value-of select="title"/> 
</xsl:template> 
+0

おかげで、しかし、XSLスタイルシートが使用されます異なるコンテキストでは、それよりも抽象的である必要があります。 – bjudson

+0

@handsofaten:OK、私の更新された回答を参照してください。 –

+0

これは役に立ちます、ありがとう。私はここでも例1を気付きました。これは便利です:http://php.net/manual/en/simplexmlelement.xpath.php – bjudson