Ответ
MoKo 07.11.2016 02:03
Посмотрел код php, они всегда копируют xdoc перед тем, как использовать
его в качестве шаблона (что понятно весьма накладно), поэтому у них проблема не воспроизводится:
/* libxslt uses _private, so we must copy the imported
stylesheet document otherwise the node proxies will be a mess */
newdoc = xmlCopyDoc(doc, 1);
xmlNodeSetBase((xmlNodePtr) newdoc, (xmlChar *)doc->URL);
prevSubstValue = xmlSubstituteEntitiesDefault(1);
prevExtDtdValue = xmlLoadExtDtdDefaultValue;
xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
sheetp = xsltParseStylesheetDoc(newdoc);
Кстати мы тоже используем _private, но возможно менее активно чем php, надо будет добавить тест на то, как оно себя ведет в таком случае.