如何实现XMLDSIG';使用LibXML2进行XPath转换?

如何实现XMLDSIG';使用LibXML2进行XPath转换?,xml,xpath,libxml2,xml-dsig,Xml,Xpath,Libxml2,Xml Dsig,我正在尝试从实现,由于一些问题我将不深入讨论,我无法使用任何其他库(例如) 规范规定,给定XPath表达式: XPath表达式…对输入节点集中的每个节点计算一次。结果将转换为布尔值。如果布尔值为true,则该节点将包含在输出节点集中。如果布尔值为false,则从输出节点集中忽略该节点 我知道如何解析文档,创建XPath上下文对象,根据文档根中的上下文计算表达式,以及取消链接表达式未选择的所有元素,但这并不是标准所要求的如何使用XPath上下文对象“遍历”xmlDoc,在每个节点上计算XPath表

我正在尝试从实现,由于一些问题我将不深入讨论,我无法使用任何其他库(例如)

规范规定,给定XPath表达式:

XPath表达式…对输入节点集中的每个节点计算一次。结果将转换为布尔值。如果布尔值为true,则该节点将包含在输出节点集中。如果布尔值为false,则从输出节点集中忽略该节点


我知道如何解析文档,创建XPath上下文对象,根据文档根中的上下文计算表达式,以及取消链接表达式未选择的所有元素,但这并不是标准所要求的如何使用XPath上下文对象“遍历”xmlDoc,在每个节点上计算XPath表达式并有选择地删除节点?

我最终找到了一个解决方案。需要手动修改上下文才能使其正常工作。以下是一些基本代码,减去错误检查:

result = xmlXPathEvalExpression(BAD_CAST "(//. | //@* | //namespace::*)", context);
...
compiled = xmlXPathCompile(BAD_CAST expression);
...
for (i = result->nodesetval->nodeNr - 1; i >= 0; i--)
{
  ...
  result->node = result->nodesetval->nodeTab[i];
  rc = xmlXPathCompiledEvalToBoolean(compiled, context);
  ...
}