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
是的,這是一個問題。但是,即使做的語法正確後,正則表達式匹配是不會發生上述應用的情況下, 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'沒有成功 –
如果@name不等於「端口」,然後斷言是要失敗的。 –