2017-08-28 78 views
0

我已經和XML片斷這樣的。我需要做的XSD驗證,使得,例如:如果該字段屬性「名稱」是端口,那麼它必須匹配它是否是一個數的正則表達式(如「\ p {釹} +」)XSD屬性值基於正則表達式驗證在XSD 1.1斷言

<Data> 
    <Attributes> 
     <Field name="nodeType">abcd</Field> 
     <Field name="port">5462</Field> 
    </Attributes> 
</Data> 

在我的XSD,我使用的是斷言如下圖所示

<xs:element name="Field" maxOccurs="unbounded" minOccurs="0"> 
           <xs:complexType> 
            <xs:simpleContent> 
            <xs:extension base="xs:string"> 
             <xs:attribute type="xs:string" name="name" use="optional"/> 
             <xs:assert test="if(@name='port') then matches($value,'\p{Nd}+') else false())"/> 
            </xs:extension> 
            </xs:simpleContent> 
           </xs:complexType> 
           </xs:element> 

但是,當我跑,我得到以下異常拋出

xml is NOT valid reason:org.xml.sax.SAXParseException;cvc-xpath.3.13.4.2a: XPST0003 - Assertion XPath expression ('if(@name='port') then matches($value,'\p{Nd}+') else false())') on the schema type '#AnonType_FieldAttributesDataContainerRtms' couldn't compile successfully 

回答

0

你已經有了一個流浪右括號:

比較
false()) 
    ^

撒克遜錯誤消息:

Error at xs:assert on line 7 column 102 of test.xsd: 
    Unexpected token ")" beyond end of expression 
+0

是的,這是一個問題。但是,即使做的語法正確後,正則表達式匹配是不會發生上述應用的情況下, XML不是正當的理由:org.xml.sax.SAXParseException;的systenId:文件:/ C:/RTMS_Code/trunk/RestClient/conf/xml/NetConf_Node_XML_Template.xml; lineNumber:5; columnNumber:47; CVC-斷言:斷言評價( '如果(@名稱=' 端口 '),接着匹配($值,' \ p {}釹+ ')其他錯誤()')爲元素 '現場' 的模式類型 '#AnonType_FieldAttributesDataContainerRtms'沒有成功 –

+0

如果@name不等於「端口」,然後斷言是要失敗的。 –