2016-02-29 32 views
2

我需要指定某些XML元素始終不爲空且不爲空。我發現this question,這表明使用限制將minLength設置爲1.但是一些海報建議使用帶有正則表達式的模式限制,而不是或限制minLength限制。一個正則表達式優於minLength的好處是什麼?爲什麼使用正則表達式,如果你需要一個非空元素?

+0

我需要的是確保至少有一個非空白字符。嵌入的空白是有效的。 –

+0

然後你需要使用正則表達式。有關詳細信息,請參見[我的答案](http://stackoverflow.com/a/35707836/290085)。 – kjhughes

回答

0

使用正則表達式允許一個在指定的有效性,而不是僅僅依靠長度的空白和非空白字符之間進行區分。

例如,如果沒有正則表達式,NonEmptyString

<xs:simpleType name="NonEmptyString"> 
    <xs:restriction base="xs:string"> 
    <xs:minLength value="1" /> 
    </xs:restriction> 
</xs:simpleType> 

允許<x> </x>(但不是<x/><x></x>)。 這可能是也可能不是你想要的。

雖然,與正則表達式,NonEmptyStringWithoutSpaces

<xs:simpleType name="NonEmptyStringWithoutSpaces"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="\S+"/> <!-- one or more non-whitespace chars --> 
    </xs:restriction> 
</xs:simpleType> 

允許<x> </x>(並且仍然允許未<x/><x></x>以及)。但請注意,這也不允許<x>A B</x>這可能不是你想要的。

如果你想允許嵌入的空格,你可以使用

<xs:simpleType name="NonEmptyNonBlankString"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value=".*\S.*"/> <!-- at least one non-whitespace char --> 
    </xs:restriction> 
</xs:simpleType> 

允許<x> </x><x/>,或<x></x>,同時允許<x>A B</x><x> A </x>。或者,沒有正則表達式,你可以使用一個xs:whiteSpace方面:

<xs:simpleType name="NonEmptyNonBlankString"> 
    <xs:restriction base="xs:string"> 
    <xs:minLength value="1" /> 
    <xs:whiteSpace value='collapse'/> 
    </xs:restriction> 
</xs:simpleType> 

這可能是你想要的。

+0

非常感謝。我測試了一下,看起來由單個空格組成的值被拒絕了,這讓我認爲值自動被修剪。但這可能是一個危險的假設,正則表達式更可靠。 –

+1

@ROBERTRICHARDSON,根據簡單類型定義的基本類型的空白麪的值,可以修剪或不修剪空白。 –

相關問題