2017-08-28 12 views
0

私はこのようなXMLスニペットを持っています。たとえば、フィールド属性 'name'がportの場合、それは数字であるかどうか( '\ p {Nd} +'のような)に一致する必要があります。XSD 1.1のXSD属性値ベースの正規表現検証はアサートします

私のXSDで
<Data> 
    <Attributes> 
     <Field name="nodeType">abcd</Field> 
     <Field name="port">5462</Field> 
    </Attributes> 
</Data> 

<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; systemId:file:/ C:/RTMS_Code/trunk/RestClient/conf/xml/NetConf_Node_XML_Template.xml。 lineNumber:5; columnNumber:47; cvc-assertion:スキーマタイプ '#AnonType_FieldAttributesDataContainerRtms'の要素 'Field'のアサーション評価( 'if(@ name =' port ')は、($ value、' \ p {Nd} + ')else false()成功しませんでした –

+0

@nameが "port"と等しくない場合、アサーションは失敗します。 –