我正在尝试从XPath transform实施XMLDSIG spec,由于我不会涉及的一些问题,我不能使用任何其他库(例如xmlsec })。
规范声明给出XPath表达式:
对输入节点集中的每个节点计算一次XPath表达式....结果转换为布尔值。如果布尔值为true,则该节点包含在输出节点集中。如果布尔值为false,则从输出节点集中省略该节点。
我知道如何解析文档,创建XPath上下文对象,根据文档根目录中的上下文计算表达式,并取消链接表达式未选择的所有元素,但这不符合标准要求。 如何使用XPath上下文对象“遍历”xmlDoc,在每个节点评估XPath表达式并有选择地删除节点?
答案 0 :(得分:0)
我最终找到了解决方案。需要手动设置上下文以使其工作。这是一些骨架代码,减去错误检查:
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);
...
}