XMLを含むはずのTEXT入力を受け取るmysql5.1のストアドプロシージャがあります。
XMLを正常に解析し、必要なすべてを実行できました。エラー処理の部分に取り組んでいるので、入力XMLが整形式で有効であることを確認する方法を知る必要がありますか?
ありがとう
XMLを含むはずのTEXT入力を受け取るmysql5.1のストアドプロシージャがあります。
XMLを正常に解析し、必要なすべてを実行できました。エラー処理の部分に取り組んでいるので、入力XMLが整形式で有効であることを確認する方法を知る必要がありますか?
ありがとう
MySQLのXMLサポートには、「これは整形式のXMLです」と書かれていることは何も知りませんが、偽造することはできます。MySQLには次のExtractValue
機能があります。
ExtractValue()
xml_frag
XMLマークアップのフラグメントと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;