javascript - 使用缩进 JavaScript 构建显示
问题描述
我有如下所示的输入对象:
myObj = {
"Ob1": {
"myObjName": "A1",
"myObjType": "string",
"myObjOcc": "minOccurs="1""
"Ob2": {
"myObjName": "B1",
"myObjType": "string",
"myObjOcc": "minOccurs="1""
"Ob3": {
"myObjName": "C1",
"myObjType": "string",
"myObjOcc": "minOccurs="1""
}
}
}
"Ob4": {
"myObjName": "A2",
"myObjType": "string",
"myObjOcc": "minOccurs="1""
}
}
而且我必须以 xml 模式方式显示对象:
<xs:complexType name="A1" type="string" minOccurs="1">
<xs:complexType name="B1" type="string" minOccurs="1">
<xs:simpleType name="C1" type="string" minOccurs="1"/>
</complexType>
</complexType>
<xs:simpleType name="A2" type="string" minOccurs="1"/>
这个想法是,如果一个对象有子对象,那么它就是一个复杂类型,如果没有,它就是一个简单类型。
我有这段代码正在打印,但如果有人可以帮助我用缩进构造它:
function isNestedObject(obj) {
for (var o in obj) {
if (isComplexType(o, obj)) {
return true;
}
}
}
function isComplexType(key, obj) {
return (typeof obj[key] === "object");
}
function xsdStructure(obj) {
var str = "",
properties = obj.properties;
if (isNestedObject(obj)) {
if (obj instanceof Array) {
for(var o in obj) {
xsdStructure(obj[o]);
}
}
str += "<xs:complexType name=\"" + obj.attrName + "\" type=\"" + obj.type + "\" " + obj.multiplicty + ">\n";
for (var key in obj) {
var arr = obj[key];
if (arr instanceof Array) {
for (var a in arr) {
str += xsdStructure(arr[a]);
}
}
}
str += "</xs:complexType>\n"
} else {
str = "<xs:simpleType name=\"" + obj.attrName + "\" type=\"" + obj.type + "\" " + obj.multiplicty + "/>\n";
}
return str;
}
function printing(myObj) {
var result = "";
for (var key in object) {
result += xsdStructure(object[key]);
}
result = '<xs:schema>\n'
+ result
+ '</xs:schema>';
return result;
}
它假设看起来像上面的 xml 模式,但我不能使用 DOMParser 所以它必须手动完成。
提前致谢
解决方案
我为你准备了小提琴。我有几件事要跟你说。首先,您应该在所有与初始对象一起使用的函数中使用相同的 attrs 名称。例如: str += "<xs:complexType name=\"" + obj.myObjName + "\" type=\"" + obj.myObjType + "\" " + obj.myObjOcc + ">\n";
而不是你的,str += "<xs:complexType name=\"" + obj.attrName + "\" type=\"" + obj.type + "\" " + obj.multiplicty + ">\n";
你也永远不会得到这个条件if (obj instanceof Array)
,因为你的 obj 根本不包含数组。
推荐阅读
- java - 为什么 HotSpot ExecutionSample 事件总是返回 STATE_RUNNABLE?
- git - 要求 git 提交来自 *@mydomain.com
- php - 我在我的 laravel 项目中找不到 layout.blade.php
- excel - Excel:IF ISBLANK 函数将 6 个附加行视为已填充
- ruby-on-rails - ActiveModel:: Accounts::RetreatsController#create 中缺少属性错误
- netlogo - rnd:weighted-one-of-list work 不会返回我认为应该的分布
- r - 循环和条件的问题。在值应该有效时将其标记为无效
- jquery - jQuery .find('li').length 必须来自兄弟/孩子?
- java - 尝试构建 Rest 服务时 Spring Boot 失败
- r - 根据第二个数据帧 R 上的索引替换数据帧中的值