@nwellnholfのアドバイスに基づいて、transform.cをチェックし、しばらくして実装方法を見つけました。
xsltApplySequenceConstructor
@nwellnholf が書いたように、核となる魔法は内部にあります。本来この関数は transform.c でのみ定義されているため、使用するにはライブラリを編集してこの関数を公開する必要があります。これを行うには、これを transform.h で定義し、libxslt を再コンパイルします。
XSLTPUBFUN void xsltApplySequenceConstructor(xsltTransformContextPtr ctxt, xmlNodePtr contextNode, xmlNodePtr list, xsltTemplatePtr templ);
2 番目のステップは、独自の xslt 関数を実装し、独自の命令を進め、処理を xslt に戻すことです。これらの手順は、次のコマンドを使用して実行されます。
void elemChangeContext(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltElemPreCompPtr /*comp*/)
{
if ( ctxt == NULL || node == NULL || inst == NULL || ctxt->insert == NULL )
return;
xmlNodePtr cur = /* change context to different node */;
xmlNodePtr curInst = inst->children; //sub xslt instruction
xsltApplySequenceConstructor(ctxt,cur, curInst,NULL);
}