シリアル化された xml と、xml を解析してテーブルに値を挿入するストアド プロシージャを生成するサード パーティ コンポーネントがあります。
コンポーネントと sql ストアド プロシージャで処理される xsi nil に問題があります。コンポーネントまたはストアド プロシージャを変更する権限がありません。したがって、プロシージャ ソリューションの xsi=true ではなく、プロパティ ソリューションの IsNullable 属性は役に立ちません。
正規表現を使用してこれを処理しようとしています。
.*xsi\:nil\=\"true\" \/\>
上記の正規表現の一致は、以下の入力に最適です
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<prop1>
<prop11>abc</prop11>
<prop12 xsi:nil="true" />
<prop13>def</prop13>
</prop1>
</Root>
しかし、この入力ではありません
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><prop1><prop11>abc</prop11><prop12 xsi:nil="true" /><prop13>def</prop13></prop1></Root>
望ましい出力は
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<prop1>
<prop11>abc</prop11>
<prop13>def</prop13>
</prop1>
</Root>
更新: プロパティ名とレベルは実行時にのみわかります。以下の別の xml を参照してください
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<pa>
<paa>abc</paa>
<pab xsi:nil="true" />
<pac>def</pac>
<pad>
<pada>val1</pada>
<padb xsi:nil="true" />
<padc>
<padca>vala</padca>
<padcb xsi:nil="true" />
</padc>
<pad>
</prop1>
</Root>
上記の xml の望ましい出力は次のとおりです。
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<pa>
<paa>abc</paa>
<pac>def</pac>
<pad>
<pada>val1</pada>
<padc>
<padca>vala</padca>
</padc>
<pad>
</prop1>
</Root>
誰か助けてくれませんか
ありがとう、
エセン