我正在尝试为libxslt (c++)创建一个xslt扩展函数。我的扩展函数接受一个字符串作为输入,然后xml解析器解析该字符串,该函数返回解析后的xml。我通过下面的表达式返回值:
void fnParse(xmlXPathParserContextPtr ctx, int nargs)
{
...
xmlXPathReturnNodeSet(ctx, xmlXPathNodeSetCreate(node));
}但是我发现libxslt在使用后并没有释放节点内存。它释放xmlNodeSet,但不释放存储在此节点集中的节点。也许我错过了一些重要的东西。在扩展函数中返回XML节点的正确方法是什么?
发布于 2021-10-05 17:03:02
您必须通过调用xsltCreateRVT和xsltRegisterLocalRVT来创建并注册一个“结果值树”,然后将想要返回的节点添加到该树中。看看像exsltStrTokenizeFunction这样的函数,看看它是如何工作的:
https://gitlab.gnome.org/GNOME/libxslt/-/blob/master/libexslt/strings.c
https://stackoverflow.com/questions/69439466
复制相似问题