2011-06-27 17 views
3

私はxslからHTMLを生成するためにPHPクラスXSLTProcessorを使用しています。 xsl内では、自分のカスタム名前空間要素を自分のプロセッサクラスで処理したいと思っています。例えばのでXSL内のカスタムXML名前空間の処理

<xsl:for-each select="doc/elements/*"> 
    <doc:renderElement element="." /> 
</xsl:for-each> 

これは私のカスタムプロセッサクラスのインスタンスのメソッドrenderElementを呼び出す必要があります。

registerPHPFunctions関数を使用してphp関数を呼び出すことができます。しかし、これは静的メソッドを呼び出すことのみをサポートしているようです。

答えて

2

はい、XSLTProcessor::registerPHPFunctionsは、クラスの静的関数呼び出しのみをサポートしています。ただし、これらの静的呼び出しを使用して、ファクトリまたはインスタンスレジストリを提供して、実際のオブジェクトを提供することができます。あなたの場合、おそらく要素名に基づいています。

これが行われた既存のコードはPIWI - PHP Transformation Frameworkにあります。

+0

http://php.net/manual/en/book.simplexml.php SimpleXMLFormatについて感謝します。 PIWIは、私が取り組んでいるプロジェクトの大きなリソースのようです。私はそれに潜入する。 – sander

-1

まあ、私はこれを使用してスクリプトを持っている、多分それはあなたのために

// Simple XML 
    $xml = new SimpleXMLElement($data); 
    // You need to set every namespace 
    $xml->registerXPathNamespace('e', 'http://myxml.withalotofnamespaces.com/xml'); 
    foreach ($xml->xpath('//e:responseData/e:cityCodes') as $city) { 
     // getting each city as an Array, $city is a SimpleXMLElement 
     // Work Here 
    } 

utilになりますあなたはポルトガル語で読み試してみたい場合は、ここでPHPを使用してハンドルネームスペースXMLのための他の多くの情報がありますSimpleXMLFormt:あなたの答えのための http://www.plugandpray.com.br/posts/manipulando_xml_com_namespace_em_php

+0

これは、文書が変換される前または後に私のカスタム要素を処理したいときには素晴らしい記事になります。しかし、私の要素はxls変換中にレンダリングする必要がありますので、for-eachなどを使用できます。 – sander