1
ユーザーが提供するXPathクエリを検証して、構文的に正しいことを確認します。XPath式の検証
XML文書を使用せずにXPathクエリを「検証する」ことは意味がありますか?
どのように私はlibxmlでこのようなことを達成できますか?
ユーザーが提供するXPathクエリを検証して、構文的に正しいことを確認します。XPath式の検証
XML文書を使用せずにXPathクエリを「検証する」ことは意味がありますか?
どのように私はlibxmlでこのようなことを達成できますか?
XPath式を評価せずにlibxmlを使用してコンパイルできます。 xmlXPathCompileを参照してください。無効な式の場合、戻り値はNULLにする必要があります。
#include <stdio.h>
#include <libxml/xpath.h>
#include <libxml/xmlerror.h>
void
handle_structured_error(void *userdata, xmlErrorPtr err)
{
printf("%s", err->message);
}
int
main(int argc, char **argv)
{
if (argc < 2)
return 1;
const char *expr = argv[1];
xmlXPathContextPtr ctx = xmlXPathNewContext(NULL);
xmlSetStructuredErrorFunc(ctx, &handle_structured_error);
xmlXPathCompExprPtr p = xmlXPathCtxtCompile(ctx, (xmlChar *)expr);
if (p) {
printf("Valid: %s\n", expr);
xmlXPathFreeCompExpr(p);
} else {
printf("Invalid: %s\n", expr);
}
xmlXPathFreeContext(ctx);
return 0;
}
NULLが返されたときに問題を解決する方法を示すメッセージを表示するにはどうすればよいですか? xmlXPathEvalExpressionを使用すると、構文が正しくないことを示すエラーメッセージが表示されます。 – user128026
私はxmlXPathEvalExpressionを使用できません。プログラムのこの段階でxmlXPathContextを持っていないためです。 – user128026
私の答えを見てください:xmlXPathEvalExpressionではなくxmlXPathCompileを使用してください。 xmlXPathContextはまったく必要ありません。 – p00ya