Zastanawiam się, czy i jak można zarejestrować funkcję przestrzeni użytkownika PHP za pomocą procesora XSLT, który może nie tylko pobrać tablicę węzłów, ale także ją zwrócić?Jak filtrować wybrany zestaw węzłów za pomocą funkcji PHP?
Teraz PHP narzeka na tablicy do konwersji łańcucha za pomocą wspólnego Setup:
function all_but_first(array $nodes) {
array_shift($nodes);
shuffle($nodes);
return $nodes;
};
$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStylesheet($xslDoc);
$buffer = $proc->transformToXML($xmlDoc);
XmlDocument ($xmlDoc
) przekształcenie może być na przykład:
<p>
<name>Name-1</name>
<name>Name-2</name>
<name>Name-3</name>
<name>Name-4</name>
</p>
W arkuszu stylów To się nazywa tak:
<xsl:template name="listing">
<xsl:apply-templates select="php:function('all_but_first', /p/name)">
</xsl:apply-templates>
</xsl:template>
Ogłoszenie dotyczy t on następujący:
Wskazówka: Array do konwersji łańcucha
Nie rozumiem dlaczego, jeśli funkcja pobiera tablicę jako wejście nie jest w stanie zwrócić tablicę, jak również?
Byłem też wypróbowaniu innych „funkcja” nazwiska jak widziałem jest php:functionString
ale próbowałem tak daleko (php:functionArray
, php:functionSet
i php:functionList
) nie działa.
W podręczniku PHP napisałem, że mogę zwrócić kolejne elementy zawierające DOMDocument
, jednak te elementy nie są już z oryginalnego dokumentu. To nie ma dla mnie większego sensu.
Zrobiłem dłuższą badań na ten temat, a ja przyszedłem z tego samego rozwiązania jak stwierdzono w ostatnim zdaniu: trzeba by wrócić inną 'DOMDocument' z tej funkcji. Ale potem znowu robi się bzdurny, ponieważ właśnie wydostałem zwykły tekst i żadnych węzłów. ('' xsl: for-each' też nie pomogło) –
@DanLee: Dzięki za opinię. Po prostu próbowałem z iteratorem, ale to też nie jest radość: * "Ostrzeżenie: Obiekt PHP nie może zostać przekonwertowany na łańcuch XPath" * - następnie [Zajrzałem do źródła] (http: //lxr.sweon. net/php/http/source/ext/dom/xpath.C# L222) i obsługuje on tylko obiekt będący instancją jakiegoś DomNode - tak więc nie udało się uzyskać wszystkich xpathów węzła, związać ich i zwrócić "prawdziwego" DomNodeList zarówno. To bałagan :) Prawdopodobnie warto zasugerować, aby w tym miejscu wykorzystać tablicę węzłów domyskowych jako wartość zwracaną. – hakre
Połączyłem niewłaściwą bibliotekę, ale kod jest identyczny: http://lxr.sweon.net/php/http/source/ext/xsl/xsltprocessor.c#L331 – hakre