3

是否有可能使用 JSONIX 从 XML 模式生成一个空对象?我通常在创建适合 XML 模式的新 JS 对象时遇到问题。因此,这将非常有帮助。任何例子将不胜感激。我尝试了以下方法来创建一个新对象。在这种情况下,NodeType 是一个复杂类型名称。

{name: {localpart: nodeType}, value:{}};

然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到例如以下对我没有多大帮助的错误: Element [ELEMNAME] is not known in this context

如果这是不可能的,我通常如何创建一个应该符合架构的新对象?

非常感谢您的任何想法!

编辑:好的,这里更具体地说一个例子:

"NodeType":{
        "type":"object",
        "title":"NodeType",
        "properties":{
            "id":{
                "title":"id",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"id",
                    "namespaceURI":""
                }
            },
            "x":{
                "title":"x",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/decimal"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"x",
                    "namespaceURI":""
                }
            },
            "y":{
                "title":"y",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/decimal"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"y",
                    "namespaceURI":""
                }
            }

这是我的 XSD 文件中的一个 JSON 模式摘录。我想要的是一个看起来像这样的对象:

{id:"", x: "", y: ""}

目标是将此对象编组为 XML。

4

2 回答 2

2

免责声明:我是Jsonix的作者。

如果我的问题是正确的,那么您会问,您如何构造一个可以使用 Jsonix 编组的 JS 对象。

大多数人所做的技巧是采用 XML“这就是它应该看起来的样子”,解组它和 log JSON.stringify(myObject, null 2),类似的东西。然后你会看到合适的 JS 应该是什么样子。

您还可以从 XML Schema 生成 JSON Schema这将为您提供一个像这样的 JSON Schema ,提供编组所需的 JSON 的完整描述。

我也考虑实现类似 TypeScript 类的生成,但那是未来的音乐。

更新

对不起,我还是不太清楚你的问题是什么。您添加了一个 JSON 模式,它定义了一个NodeType包含字符串id、小数xy属性的复杂类型。

你在问这个空对象是什么。好吧,您的复杂类型的空对象就是{}.
例如,具有值的对象是{id:"someId", x: 4, y:2}

但是在 XML 中,您不能编组一个复杂类型,而是编组一个复杂类型的元素。它以 a 的形式表示{ name: ..., value: ... }。所以你可能会有类似的东西:

{
  "name": {
    "namespaceURI": "uri",
    "localPart": "root"
  },
  "value": {
    "id" : "someId",
    "x" : 4,
    "y" : 2,
    "TYPE_NAME": "NodeType"
  }
}

希望这可以帮助。

于 2015-06-29T09:32:19.070 回答
1

为了进一步澄清这个问题:Javascript 是一种松散类型的语言。即使一个 JS 类有一个原型结构,一个 JS 对象只有在它的成员被填充了值时才具有这个结构。所以 Jsonix 从 XSD 生成 JS 映射,然后 JS 脚本从映射中实例化一个新的 JS 对象不会创建一个未填充的结构。只有当对象填充了值时,才会创建结构。该填充可以通过为新对象分配值直接在代码中完成,在将该成员添加到复杂的整体 JS 对象之后,向下钻取包含的成员树来填充每个成员,程序员使用 XSD 或其文档作为指南。或者复杂的整体 JS 对象可以由 JSON 块填充,在这种情况下,可以从 Jsonix 解组的复杂对象的 XML 生成 JSON。解组(和任何编组)可以由 Jsonix 执行。最重要的是,必须将要取消/编组的复杂对象的现有 XML 或隐式结构中的逐行分配提供给使用 Jsonix 实现其功能的代码。这不像在 Java(例如 JAXB)中,XSD 可用于生成具有其所有结构的新复杂对象,然后由 Java 程序填充(通过树中的分配或通过从 XML 解组)。

于 2018-08-14T15:38:00.810 回答