0

XMLDSIG 仕様からXPath 変換を実装しようとしていますが、ここでは説明しないいくつかの問題があるため、追加のライブラリ ( xmlsec など)を使用できません。

仕様では、XPath 式を指定すると次のように述べています。

XPath 式...は、入力ノード セット内のノードごとに 1 回評価されます。結果はブール値に変換されます。ブール値が true の場合、ノードは出力ノード セットに含まれます。ブール値が false の場合、ノードは出力ノード セットから省略されます。

ドキュメントを解析する方法、XPath コンテキスト オブジェクトを作成する方法、ドキュメント ルートのコンテキストに対して式を評価する方法、式によって選択されていないすべての要素のリンクを解除する方法は知っていますが、それは標準が要求するものではありません。XPath コンテキスト オブジェクトを使用して xmlDoc を「ウォーク」し、各ノードで XPath 式を評価し、ノードを選択的に削除するにはどうすればよいですか?

4

1 に答える 1

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);
  ...
}
于 2012-10-24T18:29:48.367 に答える