angular-xml-editor
Version:
XML editor component for Angular
87 lines (86 loc) • 7.79 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { XmlSchema } from './xmlSchema.class';
export class XmlSchemaLoader {
/**
* @param {?} schemaContent
*/
constructor(schemaContent) {
if (!schemaContent || schemaContent === '') {
return;
}
/** @type {?} */
const domparser = new DOMParser();
/** @type {?} */
const schemaDom = domparser.parseFromString(schemaContent, 'text/xml');
/** @type {?} */
let result = [];
/** @type {?} */
const rawElementsAtRoot = /** @type {?} */ (Array.from(schemaDom.documentElement.childNodes));
rawElementsAtRoot.forEach(e => {
/** @type {?} */
const subChilds = this.getRawElements(e);
result = result.concat(subChilds);
});
this.xmlSchema = new XmlSchema(this.getXsdNodes(/** @type {?} */ (result)));
}
/**
* @param {?} node
* @return {?}
*/
getRawElements(node) {
/** @type {?} */
let result = [];
if (this.isValidXsdNode(node)) {
result = result.concat(node);
}
/** @type {?} */
const children = /** @type {?} */ (Array.from(node.childNodes));
children.forEach(child => {
result = result.concat(this.getRawElements(child));
});
return result;
}
/**
* @param {?} node
* @return {?}
*/
isValidXsdNode(node) {
/** @type {?} */
const allowedXsdTypes = ['element', 'group', 'complexType'];
/** @type {?} */
const asElem = /** @type {?} */ (node);
if (asElem) {
if (allowedXsdTypes.includes(asElem.localName)) {
if (asElem.attributes.getNamedItem('name')) {
// console.warn(asElem.attributes.getNamedItem('name').value);
return true;
}
else {
return false;
}
}
else {
return false;
}
}
else {
return false;
}
}
/**
* @param {?} rawElements
* @return {?}
*/
getXsdNodes(rawElements) {
// console.warn(rawElements.length);
return new Map(rawElements.map(n => [n.attributes.getNamedItem('name').value, /** @type {?} */ (n)]));
}
}
if (false) {
/** @type {?} */
XmlSchemaLoader.prototype.xmlSchema;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWG1sU2NoZW1hTG9hZGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci14bWwtZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL2NvZGUveG1sLXJ1bGVzLWNoZWNrL1htbFNjaGVtYUxvYWRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE1BQU07Ozs7Z0JBR2UsYUFBcUI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUssRUFBRSxFQUFFO1lBQzFDLE9BQU87U0FDUjs7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDOztRQUNsQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFJdkUsSUFBSSxNQUFNLEdBQVcsRUFBRSxDQUFDOztRQUN4QixNQUFNLGlCQUFpQixxQkFBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFjLEVBQUM7UUFDeEYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFOztZQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ25DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsbUJBQUMsTUFBbUIsRUFBQyxDQUFDLENBQUM7Ozs7OztJQUdoRSxjQUFjLENBQUMsSUFBVTs7UUFDL0IsSUFBSSxNQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5Qjs7UUFFRCxNQUFNLFFBQVEscUJBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFXLEVBQUM7UUFDdkQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDcEQsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7Ozs7OztJQUdSLGNBQWMsQ0FBQyxJQUFVOztRQUMvQixNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7O1FBQzVELE1BQU0sTUFBTSxxQkFBRyxJQUFlLEVBQUM7UUFFL0IsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM5QyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFOztvQkFFMUMsT0FBTyxJQUFJLENBQUM7aUJBQ2I7cUJBQU07b0JBQ0wsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7Ozs7OztJQUdLLFdBQVcsQ0FBQyxXQUFzQjs7UUFFeEMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxvQkFBRSxDQUFZLEVBQUMsQ0FBQyxDQUFDLENBQUM7O0NBRXBIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWG1sU2NoZW1hIH0gZnJvbSAnLi94bWxTY2hlbWEuY2xhc3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFhtbFNjaGVtYUxvYWRlciB7XHJcbiAgcHVibGljIHhtbFNjaGVtYTogWG1sU2NoZW1hO1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NoZW1hQ29udGVudDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXNjaGVtYUNvbnRlbnQgfHwgc2NoZW1hQ29udGVudCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZG9tcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgY29uc3Qgc2NoZW1hRG9tID0gZG9tcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzY2hlbWFDb250ZW50LCAndGV4dC94bWwnKTtcclxuICAgIC8vIGNvbnN0IHJhd0VsZW1lbnRzID0gQXJyYXkuZnJvbShzY2hlbWFEb20uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpIGFzIEVsZW1lbnRbXTtcclxuICAgIC8vIHRoaXMueG1sU2NoZW1hID0gbmV3IFhtbFNjaGVtYSh0aGlzLmdldFhzZE5vZGVzKHJhd0VsZW1lbnRzKSk7XHJcblxyXG4gICAgbGV0IHJlc3VsdDogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCByYXdFbGVtZW50c0F0Um9vdCA9IEFycmF5LmZyb20oc2NoZW1hRG9tLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKSBhcyBFbGVtZW50W107XHJcbiAgICByYXdFbGVtZW50c0F0Um9vdC5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBjb25zdCBzdWJDaGlsZHMgPSB0aGlzLmdldFJhd0VsZW1lbnRzKGUpO1xyXG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHN1YkNoaWxkcyk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMueG1sU2NoZW1hID0gbmV3IFhtbFNjaGVtYSh0aGlzLmdldFhzZE5vZGVzKHJlc3VsdCBhcyBFbGVtZW50W10pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmF3RWxlbWVudHMobm9kZTogTm9kZSk6IE5vZGVbXSB7XHJcbiAgICBsZXQgcmVzdWx0OiBOb2RlW10gPSBbXTtcclxuICAgIGlmICh0aGlzLmlzVmFsaWRYc2ROb2RlKG5vZGUpKSB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQobm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2RlcykgYXMgTm9kZVtdO1xyXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodGhpcy5nZXRSYXdFbGVtZW50cyhjaGlsZCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWYWxpZFhzZE5vZGUobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWxsb3dlZFhzZFR5cGVzID0gWydlbGVtZW50JywgJ2dyb3VwJywgJ2NvbXBsZXhUeXBlJ107XHJcbiAgICBjb25zdCBhc0VsZW0gPSBub2RlIGFzIEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGFzRWxlbSkge1xyXG4gICAgICBpZiAoYWxsb3dlZFhzZFR5cGVzLmluY2x1ZGVzKGFzRWxlbS5sb2NhbE5hbWUpKSB7XHJcbiAgICAgICAgaWYgKGFzRWxlbS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnbmFtZScpKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLndhcm4oYXNFbGVtLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCduYW1lJykudmFsdWUpO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFhzZE5vZGVzKHJhd0VsZW1lbnRzOiBFbGVtZW50W10pIHtcclxuICAgIC8vIGNvbnNvbGUud2FybihyYXdFbGVtZW50cy5sZW5ndGgpO1xyXG4gICAgcmV0dXJuIG5ldyBNYXAocmF3RWxlbWVudHMubWFwPFtzdHJpbmcsIEVsZW1lbnRdPihuID0+IFtuLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCduYW1lJykudmFsdWUsIG4gYXMgRWxlbWVudF0pKTtcclxuICB9XHJcbn1cclxuIl19