1

XMLを含むはずのTEXT入力を受け取るmysql5.1のストアドプロシージャがあります。

XMLを正常に解析し、必要なすべてを実行できました。エラー処理の部分に取り組んでいるので、入力XMLが整形式で有効であることを確認する方法を知る必要がありますか?

ありがとう

4

1 に答える 1

0

MySQLのXMLサポートには、「これは整形式のXMLです」と書かれていることは何も知りませんが、偽造することはできます。MySQLには次のExtractValue機能があります。

ExtractValue()xml_fragXMLマークアップのフラグメントとXPath式(ロケーターxpath_exprとも呼ばれます)の2つの文字列引数を取ります。XPath式に一致する要素の子である最初のテキストノードのテキスト(CDATA)を返します。

ただし、次の理由から、これを使用してXMLをチェックすることもできます。

式(暗黙を含む)に一致するテキストノードが見つからない場合(/text()何らかの理由で、xpath_expr有効であり、xml_frag適切にネストされて閉じられている要素で構成されている限り)、空の文字列が返されます。
[...]は、適切にネストまたは閉じられていない要素が含まれている
NULL場合に返され、警告が生成されます。xml_frag

したがって、ExtractValue有効なXPath式と有効なXMLを渡すと、NULL以外の結果が得られますが、値XPathと無効なXMLを使用すると、NULLが返されます。したがって、必要なのはExtractValue、XMLをチェックしsignal、NULLを取得した場合に例外を発生させるために使用するINSERTトリガーとUPDATEトリガーを作成することだけです。

select ExtractValue(new.your_xml_column, '/*') into @xml_check;
if @xml_check is null then
    signal sqlstate '45000';
end if;
于 2012-05-18T04:20:51.930 に答える