0

我正在尝试为 libxslt (c++) 创建一个 xslt 扩展函数。我的扩展函数接受一个字符串作为输入,然后这个字符串被xml解析器解析,函数返回这个解析的xml。我通过这个表达式返回值:

void fnParse(xmlXPathParserContextPtr ctx, int nargs)
{
    ...
    xmlXPathReturnNodeSet(ctx, xmlXPathNodeSetCreate(node));
}

但是我发现 libxslt 在使用后不会释放节点内存。它释放 xmlNodeSet,但不释放存储在此节点集中的节点。也许我错过了一些重要的事情。在扩展函数中返回 XML 节点的正确方法是什么?

4

1 回答 1

0

您必须通过调用 xsltCreateRVT 和 xsltRegisterLocalRVT 创建和注册“结果值树”,然后将要返回的节点添加到该树中。看看 exsltStrTokenizeFunction 之类的函数,看看它是如何工作的:

https://gitlab.gnome.org/GNOME/libxslt/-/blob/master/libexslt/strings.c

于 2021-10-05T17:03:02.157 回答