149 lines
5.8 KiB
JavaScript
149 lines
5.8 KiB
JavaScript
|
|
class xmltojson {
|
|
constructor(xml) {
|
|
let parser = new DOMParser();
|
|
let xmlDoc = parser.parseFromString(xml, "text/xml");
|
|
|
|
this.xType = xmlDoc.documentElement;
|
|
this.jType = {};
|
|
|
|
this.setType(this.xType, this.jType);
|
|
}
|
|
toString(){
|
|
return JSON.stringify(this.jType);
|
|
}
|
|
|
|
setType(xType, jType) {
|
|
jType.n = xType.getAttribute("n");
|
|
jType.d = xType.getAttribute("d");
|
|
jType.ObjectID = xType.getAttribute("ObjectID");
|
|
|
|
let nodeProperties = findNodeOnPath(xType, 'properties');
|
|
if (nodeProperties != null) {
|
|
jType.edit_object = {};
|
|
jType.edit_object.width = nodeProperties.getAttribute("width");
|
|
|
|
jType.edit_object.columns = [];
|
|
let nodeProp = nodeProperties.firstChild;
|
|
while (nodeProp != null) {
|
|
if (nodeProp.nodeName == "prop") {
|
|
let jProp = {};
|
|
let column = this.setProp(nodeProp, jProp);
|
|
jType.edit_object.columns.push(column);
|
|
}
|
|
nodeProp = nodeProp.nextSibling;
|
|
}
|
|
let node;
|
|
node = findFirstNodeOnAttribute(nodeProperties, 'sql-query', 't', 'i');
|
|
if (node != null)
|
|
jType.edit_object.insert_query = getCdataValue(node);
|
|
node = findFirstNodeOnAttribute(nodeProperties, 'sql-query', 't', 'u');
|
|
if (node != null)
|
|
jType.edit_object.update_query = getCdataValue(node);
|
|
node = findFirstNodeOnAttribute(nodeProperties, 'sql-query', 't', 'd');
|
|
if (node != null)
|
|
jType.edit_object.delete_query = getCdataValue(node);
|
|
node = findFirstNodeOnAttribute(nodeProperties, 'sql-query', 't', 's');
|
|
if (node != null)
|
|
jType.edit_object.select_query = getCdataValue(node);
|
|
}
|
|
|
|
let nodeObjectsList = findNodeOnPath(xType, 'objects-list');
|
|
if (nodeObjectsList != null) {
|
|
jType.show_object = {};
|
|
jType.show_object.width = nodeObjectsList.getAttribute("width");
|
|
jType.show_object.d = nodeObjectsList.getAttribute("d");
|
|
|
|
let node;
|
|
node = findFirstNode(nodeObjectsList, 'sql-query');
|
|
if (node != null)
|
|
jType.show_object.select_query = getCdataValue(node);
|
|
|
|
let nFilter = findFirstNode(nodeObjectsList, 'filter');
|
|
if (nFilter != null) {
|
|
jType.show_object.filter = {};
|
|
if (nFilter.hasAttribute("height"))
|
|
jType.show_object.filter.height = nFilter.getAttribute("height");
|
|
|
|
jType.show_object.filter.columns = [];
|
|
let nextNode = nFilter.firstChild;
|
|
while (nextNode != null) {
|
|
if (nextNode.nodeName == "column") {
|
|
let jColumn = {};
|
|
let column = this.setFilterColumn(nextNode, jColumn);
|
|
jType.show_object.filter.columns.push(column);
|
|
}
|
|
nextNode = nextNode.nextSibling;
|
|
}
|
|
}
|
|
|
|
//jType.show_object.columns = [];
|
|
}
|
|
//this.win.setWidth(nodeProperties.getAttribute("width"));
|
|
|
|
}
|
|
|
|
//Переписываю колонки редактирования
|
|
setProp(xProp, jProp) {
|
|
|
|
if (xProp.hasAttribute("d"))
|
|
jProp.d = xProp.getAttribute("d");
|
|
if (xProp.hasAttribute("n"))
|
|
jProp.n = xProp.getAttribute("n");
|
|
if (xProp.hasAttribute("vt"))
|
|
jProp.vt = xProp.getAttribute("vt");
|
|
if (xProp.hasAttribute("maybenull"))
|
|
jProp.maybenull = xProp.getAttribute("maybenull");
|
|
if (xProp.hasAttribute("ot"))
|
|
jProp.ot = xProp.getAttribute("ot");
|
|
if (xProp.hasAttribute("FieldCaption"))
|
|
jProp.FieldCaption = xProp.getAttribute("FieldCaption");
|
|
if (xProp.hasAttribute("selector"))
|
|
jProp.selector = xProp.getAttribute("selector");
|
|
|
|
jProp.value = getCdataValue(xProp);
|
|
|
|
|
|
/*
|
|
if (nodeFilter.getAttribute("n")==nodeProp.getAttribute("n"))
|
|
{
|
|
let cdata1=findFirstNode(nodeFilter,'#cdata-section');
|
|
if((cdata1!=null)&&(cdata1.nodeValue!=""))
|
|
{
|
|
let cdata2=findFirstNode(nodeProp,'#cdata-section');
|
|
if (cdata2==null)
|
|
{
|
|
cdata2 = nodeProp.ownerDocument.createCDATASection("");
|
|
nodeProp.appendChild(cdata2);
|
|
}
|
|
cdata2.nodeValue=cdata1.nodeValue;
|
|
}
|
|
}
|
|
* */
|
|
return jProp;
|
|
}
|
|
|
|
//Переписать из "type->objects-list->filter"
|
|
setFilterColumn(xColumn, jColumn) {
|
|
|
|
if (xColumn.hasAttribute("d"))
|
|
jColumn.d = xColumn.getAttribute("d");
|
|
if (xColumn.hasAttribute("n"))
|
|
jColumn.n = xColumn.getAttribute("n");
|
|
if (xColumn.hasAttribute("vt"))
|
|
jColumn.vt = xColumn.getAttribute("vt");
|
|
if (xColumn.hasAttribute("object"))
|
|
jColumn.object = xColumn.getAttribute("object");
|
|
if (xColumn.hasAttribute("FieldCaption"))
|
|
jColumn.FieldCaption = xColumn.getAttribute("FieldCaption");
|
|
if (xColumn.hasAttribute("selector"))
|
|
jColumn.selector = xColumn.getAttribute("selector");
|
|
if (xColumn.hasAttribute("visible"))
|
|
jColumn.visible = xColumn.getAttribute("visible");
|
|
|
|
jColumn.value = getCdataValue(xColumn);
|
|
|
|
return jColumn;
|
|
}
|
|
}
|