2012-04-20 2 views
1

を表現します。私はこのようなXPathの()関数を使用することができます。は、私はこのようなXSDスキーマで定義されてnillableな小数点要素を持っている

xpath("string(//*[local-name()='myDecimalValue']/@*[local-name()='nil'])") == "true" 

しかし、それは普通のNULLチェックのために少し複雑に見えます。だから私は何かを逃していると私はそれを行うより良い方法があるのだろうか?

答えて

0

あなたのロジックを続けることができますよりも、あなたはmyDecimalValueが

msgName.myDecimalValue != null here 

nullの場合、単に尋ねるこの ようLOKます形状を決めるあなたのxpath

の代わりに決める形状を使用しようとすることができ

区別されたフィールドを使用している場合は、他の開発者にとってより読みやすいように使用してください。

EDIT:

あなたは
varString = System.Convert.ToString(msgName.myDecimalValue)を試すことができます。

、その後varStringがnullであるかどうか尋ねるか

私はそれを試してみましたが、それがうまく

それは私がこれを達成することができないという疑いを持っている :)

+0

10進数とNULLを比較することはできません。このエラーが発生します: 'operator '!='は 'System.Decimal'と 'null'のタイプのオペランドには適用できません –

+1

これは動作しません。 msgName.myDecimalValueはSystem.Decimal型であり、System.Nullableではなくなので、System.Convert.ToString()がnullを返す方法はありません。 –

0

を助けたいと考えてコンパイルします。

すなわち、http://support.microsoft.com/kb/942250

Properties that have a null value are not permitted in the message context. Therefore, if a null value is written into the message context, this value will be deleted.

から(これはプロモートと識別特性に関連する文書のセクションであるので、私はそれが両方に適用可能であると仮定しています)。

したがって、区別されたプロパティはメッセージのコンテキストには存在しないため、xpathソリューションが必要なソリューションであるようです。

+0

これは、プロモートされたプロパティにのみ適用可能だと思います。識別プロパティーはメッセージ・コンテキストに書き込まれないため、NULL値が許可されます。 しかし、とにかく、xpathがここに行く唯一の方法だと思われます。 –

+0

これに関連して、最近、着信するマルチパートメッセージのDistinguishedフィールドが完全に省略されたケースがありました。それを評価しようとした式の形(msg.Part.DistinguishedField)は、Null参照例外を与えました。だから、xpathはフィールド/期待値が正しいことを確認するためにmap/xsltを使ってバリデーションを行ったり、事前に解析しない限り、実際には最も安全です。 – StuartLC

関連する問題