2012-04-20 16 views
1

我在XSD架構中定義這樣的nillable小數元件:在BizTalk使用的nillable元件表達式

<xs:element name="myDecimalValue" nillable="true" type="xs:decimal" /> 

這是傑出的字段和欲檢查它是否在nill表達形狀。我可以使用像這樣的xpath()函數:

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

但是它對於簡單的空值檢查來說看起來有點複雜。所以我想知道我是否錯過了一些東西,還有更好的方法來做到這一點?

回答

0

,你可以嘗試使用決定形狀代替的XPath

你決定形狀將樂這樣 只是問,如果myDecimalValue是空

msgName.myDecimalValue != null here 

比你可以繼續你的邏輯

,如果你使用一個傑出的現場使用它的可讀性更強了其他開發

編輯:

你可以試試
varString = System.Convert.ToString(msgName.myDecimalValue);

,然後詢問是否varString爲空或不是

我嘗試過了,它編譯良好

希望它能幫助 :)

+0

你不能比較小數和零。你會得到這個錯誤:'操作「!=」不能應用於類型「System.Decimal」和「null'' – 2012-04-23 11:03:46

+1

的操作數這將不能工作。因爲msgName.myDecimalValue是System.Decimal類型,而不是System.Nullable 的 - 沒有辦法System.Convert.ToString沒有()將返回null。 – 2012-04-25 15:02:29

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

我認爲這隻適用於提升的屬性。區分屬性不寫入消息上下文,因此允許使用空值。 但無論如何,看起來像xpath是唯一的方式去這裏。 – 2013-01-16 09:09:58

+0

與此相關,最近有其中省略傑出字段的情況下*完全*對輸入多部分消息。試圖評估它的表達式形狀(msg.Part.DistinguishedField)給出了一個空引用異常。所以是的,xpath確實是最安全的,除非它也通過map/xslt進行了驗證或預解析,以確保該字段如預期的那樣正確。 – StuartLC 2013-01-16 09:17:53

相關問題