Javascript 使用JSONIX从XML模式创建空对象
是否有可能使用JSONIX从XML模式生成空对象?我通常在创建适合XML模式的新JS对象时遇到问题。因此,这将非常有帮助。任何例子都将不胜感激。 我尝试了以下方法来创建一个新对象。在本例中,节点类型是一个复杂的类型名Javascript 使用JSONIX从XML模式创建空对象,javascript,json,xml,jsonix,Javascript,Json,Xml,Jsonix,是否有可能使用JSONIX从XML模式生成空对象?我通常在创建适合XML模式的新JS对象时遇到问题。因此,这将非常有帮助。任何例子都将不胜感激。 我尝试了以下方法来创建一个新对象。在本例中,节点类型是一个复杂的类型名 {name: {localpart: nodeType}, value:{}}; 然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到了以下错误,例如,对我帮助不大:元素[ELEMNAME]在此上下文中是未知的 如果这是不可能的,我通常如何创建一个新的对象
{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模式。我想要的是一个如下所示的对象:
{id:"", x: "", y: ""}
我们的目标是将这个对象整理成XML。免责声明:我是的作者 如果我没有弄错你的问题,你会问,你怎么能构造一个JS对象,然后用Jsonix进行封送 大多数人的诀窍是使用XML“它应该是这样的”,将其与日志
JSON.stringify(myObject,null 2)
解组,诸如此类。然后您将看到适当的JS应该是什么样子
你也可以做的就是去做。这将为您提供类似的JSON模式,提供编组所需JSON的完整描述
我也考虑实现像类型化的类的生成,但是这是未来的音乐。 更新
对不起,我还是不太确定你的问题是什么。您已经添加了一个JSON模式,该模式定义了一个带有字符串id
和十进制x
和y
属性的NodeType
复杂类型
你在问这个空对象是什么。嗯,对于复杂类型,空对象将是{}
具有值的对象将是例如
{id:“someId”,x:4,y:2}
但在XML中,不能只封送一个复杂类型,而是封送一个复杂类型的元素。它以{name:…,value:…}
的形式表示。所以你可能会有这样的想法:
{
"name": {
"namespaceURI": "uri",
"localPart": "root"
},
"value": {
"id" : "someId",
"x" : 4,
"y" : 2,
"TYPE_NAME": "NodeType"
}
}
希望这能有所帮助。进一步澄清这个问题:Javascript是一种松散类型的语言。尽管JS类有一个原型结构,但JS对象只有在其成员填充了值时才具有该结构。因此,Jsonix从XSD生成JS映射,然后JS脚本从映射实例化一个新的JS对象不会创建一个未填充的结构。只有使用值填充对象时,才会创建结构。这种填充可以直接在代码中完成,方法是将值分配给新对象,在该成员添加到复杂的整体JS对象后,向下钻取其包含的成员树,填充每个成员,程序员使用XSD或其文档作为指导。或者,复杂的整体JS对象可以由JSON块填充,在这种情况下,JSON可以由Jsonix解包的复杂对象的XML生成。解组(和任何封送)可以由Jsonix执行。底线是,要取消/封送的复杂对象的现有XML或隐式结构中的逐行赋值必须提供给使用Jsonix作为其特性的代码。这与Java(如JAXB)不同,在Java(如JAXB)中,可以使用XSD生成一个新的复杂对象及其所有结构,然后由Java程序填充(通过树中的赋值或从XML中解组)。非常感谢您的支持!这是否意味着我必须创建每种复杂类型的空XML对象?我将尝试这两种方法,事实上我已经生成了一个JSON模式。但是,我不知道如何从中自动创建一个空对象,这是必需的,因为我有一个包含多个文件的非常大的架构。@mapf现在我不太清楚“空XML对象”是什么意思,以及为什么必须按复杂类型创建它<代码>{}是空对象。如果您只需要知道JSON应该是什么样子,可以解组或读取生成的JSON模式或Jsonix映射。使用TypeScript,您可以在IDE中自动完成,但这是未来的音乐。问你是否需要更透彻的解释。我在我的开始文章中添加了一个例子。也许现在更清楚一点了。@mapf对不起,不太清楚。但我已经尝试提供更多信息,请查看我的更新。非常感谢,您的更新帮助了我!我没有意识到我需要照顾的结构!