【问题标题】:JSONIX how to have a strong XML ValidationJSONIX 如何拥有强大的 XML 验证
【发布时间】:2016-12-07 13:48:29
【问题描述】:

我刚刚尝试运行 JSONIX 示例采购订单。 我这样做就像在 Highscore 网站上提到的那样。 让我感到奇怪的是,这个示例基于 XSD 的使用,传入 XML 的验证用于具有子节点的元素,但不适用于简单的标签。

这将显示错误:

 ... <item_will_cause_error partNum="926-AA">
       <productName>Baby Monitor</productName>
       <quantity>1</quantity>
       <USPrice>39.98</USPrice>
       <shipDate>1999-05-21</shipDate>
 ... </item_will_cause_error>

这不是:

 ... <item partNum="926-AA">
       <productName>Baby Monitor</productName>
       <quantity_will_cause_error>1</quantity_will_cause_error>
       <USPrice>39.98</USPrice>
       <shipDate>1999-05-21</shipDate>
 ... </item>

那么,是否可以开启强验证,因为&lt;quantity_will_cause_error&gt; 不是有效元素。

亲切的问候

马库斯

【问题讨论】:

    标签: json xml validation xsd jsonix


    【解决方案1】:

    现在我用这个

     var Jsonix = require('jsonix').Jsonix;
     //Include or require PO.js so that PO variable is available
     //For instance, in node.js:
     var PO = require('./mappings/PO').PO;
    
        //First we construct a Jsonix context - a factory for unmarshaller     
        //(parser)
        //and marshaller (serializer)
        var context = new Jsonix.Context([ PO ]);
    
        //Then we create a unmarshaller
        var unmarshaller = context.createUnmarshaller();
    
        //Unmarshal an object from the XML retrieved from the URL
    
        var fs = require('fs');
        var Ajv = require('ajv');
    
        var XMLSchemaJsonSchema =    
       JSON.parse(fs.readFileSync(
       './node_modules/jsonix/jsonschemas/w3c/2001/XMLSchema.jsonschema')
       .toString());
       var JsonixJsonSchema = JSON.parse(fs.readFileSync(
       './node_modules/jsonix/jsonschemas/jsonix/Jsonix.jsonschema')
       .toString());
        var POJsonSchema =         JSON.parse(fs.readFileSync(
       './mappings/PO.jsonschema').toString());
    
        var ajv = new Ajv();
        ajv.addSchema(XMLSchemaJsonSchema, 
       'http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema');
        ajv.addSchema(JsonixJsonSchema, 
       'http://www.jsonix.org/jsonschemas/jsonix/Jsonix.jsonschema');
        var validate = ajv.compile(POJsonSchema);
    
    
    
        unmarshaller.unmarshalFile('./po.xml',
        //This callback function will be provided
        //with the result of the unmarshalling
        function (unmarshalled) {
    
            var po_ = unmarshalled;
    
            var valid = validate(po_);
            if (!valid) {
                console.log('Validation failed.');
                console.log('Validation errors:');
                console.log(validate.errors);
            }
    
    
        });
    

    结果如下所示:

        Validation failed.
        Validation errors:
        [ { keyword: 'type',
            dataPath: '.value.items.item[1].shipDate.timezone',
            schemaPath: '#/definitions/integer/type',
            params: { type: 'integer,null' },
            message: 'should be integer,null' },
          { keyword: 'type',
            dataPath: '.value.items.item[1].shipDate',
            schemaPath: '#/anyOf/1/type',
            params: { type: 'null' },
            message: 'should be null' },
          { keyword: 'anyOf',
            dataPath: '.value.items.item[1].shipDate',
            schemaPath: '#/anyOf',
            params: {},
            message: 'should match some schema in anyOf' },
          { keyword: 'enum',
            dataPath: '.name.localPart',
            schemaPath: '#/anyOf/1/properties/name/allOf/1/properties/localPart/enum',
            params: { allowedValues: [Object] },
            message: 'should be equal to one of the allowed values' },
          { keyword: 'anyOf',
            dataPath: '',
            schemaPath: '#/anyOf',
            params: {},
            message: 'should match some schema in anyOf' } ]
    

    但这又让我想知道dataPath: '', 根目录有错误???

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多