Структурирование отображения с использованием отступа JavaScript - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть входной объект, который выглядит следующим образом:

 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"/>

Идея состоит в том, если объект имеетchild - это complexType, если нет, то это simpleType.

У меня есть этот код, который выполняет печать, но если кто-нибудь может помочь мне структурировать его с помощью отступа:

    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, поэтому это нужно сделать вручную.

Заранее спасибо

1 Ответ

0 голосов
/ 26 ноября 2018

Я приготовил скрипку для вас.У меня было несколько вещей, чтобы упомянуть для вас.Во-первых, вы должны использовать одинаковые имена 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), потому что ваш объект не содержит массивов вообще.

...