是否有可能使用JSONIX从XML模式生成空对象?我通常在创建适合XML模式的新JS对象时遇到问题。因此,这将非常有用。任何一个例子都将非常感激。 我尝试了以下方法来创建一个新对象。在这种情况下,NodeType是一个复杂的类型名称。
{name: {localpart: nodeType}, value:{}};
然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到了以下错误对我没有多大帮助:元素[ELEMNAME]在此上下文中未知
如果无法做到这一点,我如何创建一个应该符合模式的新对象?
非常感谢任何想法!
编辑: 好的,这里有一个更具体的例子:
"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 Schema摘录。我想要的是一个看起来像这样的对象:
{id:"", x: "", y: ""}
目标是将此对象编组为XML。
答案 0 :(得分:2)
免责声明:我是Jsonix的作者。
如果我的问题是正确的,你会问,你怎么能构建一个可以用Jsonix编组的JS对象。
大多数人所做的诀窍是采用XML“它应该是这样的”,解组它和日志JSON.stringify(myObject, null 2)
,就像那样。然后你会看到适当的JS应该是什么样子。
您还可以做generate an JSON Schema out of your XML Schema。这将为您提供this one之类的JSON模式,提供编组所需的JSON的完整描述。
我还考虑实现类似TypeScript类的生成,但那是未来的音乐。
<强>更新强>
对不起,我还不太确定你的问题是什么。您添加了一个JSON模式,该模式定义了NodeType
复杂类型,其中包含字符串id
和小数x
和y
属性。
你问的是这个空对象是什么。好吧,复杂类型的空对象只是{}
具有值的对象例如是{id:"someId", x: 4, y:2}
。
但是在XML中你不能编组只是一个复杂的类型,你编组一个复杂类型的元素。其中以{ name: ..., value: ... }
的形式表示。所以你可能会有类似的东西:
{
"name": {
"namespaceURI": "uri",
"localPart": "root"
},
"value": {
"id" : "someId",
"x" : 4,
"y" : 2,
"TYPE_NAME": "NodeType"
}
}
希望这有帮助。
答案 1 :(得分:1)
为进一步澄清这个问题,您需要使用:Java语言是一种松散类型的语言。即使JS类具有原型结构,但JS对象仅在其成员中填充值时才具有该结构。因此,Jsonix从XSD生成JS映射,然后从该映射实例化一个新JS对象的JS脚本不会创建未填充的结构。只有在对象中填充值时,才会创建结构。可以通过在代码中直接给新对象分配值来进行填充,然后在其成员添加到复杂的整体JS对象中后,使用XSD或它的文档作为指导,向下钻取其包含的成员树以填充每个成员。或者,可以通过JSON块填充复杂的整个JS对象,在这种情况下,可以根据Jsonix未编组的复杂对象的XML生成JSON。解封(和任何封送)可以由Jsonix执行。最重要的是,必须将要取消/封送的复杂对象的现有XML或隐式结构中的逐行分配的代码提供给使用Jsonix作为其功能的代码。这与Java(例如JAXB)不同,在XSD中,XSD可以用于生成具有其所有结构的新复杂对象,然后该复杂对象由Java程序填充(通过树中的分配或通过从XML解编)。