DOM y XMLData

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Referencia > Mecanismos >

DOM y XMLData

La interfaz XMLData ofrece total acceso a la estructura XML del documento actual con menos métodos que DOM y de manera mucho más sencilla. La interfaz XMLData ofrece una manera minimalista de leer y modificar datos XML nuevos o ya existentes. Sin embargo, puede usar la estructura DOM si quiere tener acceso desde una fuente de datos externa o si prefiere la implementación MSXML DOM.

 

Las funciones ProcessDOMNode() y ProcessXMLDataNode() que aparecen más abajo convierten los segmentos de una estructura XML de XMLData a DOM.

 

Para usar la función ProcessDOMNode():

pase el elemento raíz del segmento DOM que quiere convertir en objNode y
pase el objeto del complemento con el método CreateChild() en objCreator

 

Para usar la función ProcessXMLDataNode():

pase el elemento raíz del segmento XMLData en objXMLData y
pase el objeto DOMDocument creado con MSXML en xmlDoc

 

Conversión de DOM en XMLData

El siguiente código muestra cómo convertir segmentos DOM en XMLData.

 

////////////////////////////////////////////////////////////////

// conversión de segmentos DOM en XMLData

 

function ProcessDOMNode(objNode,objCreator)

{

 var objRoot;

 objRoot = CreateXMLDataFromDOMNode(objNode,objCreator);

 

 if(objRoot)        {                

         if((objNode.nodeValue != null) && (objNode.nodeValue.length > 0))

                 objRoot.TextValue = objNode.nodeValue;

         

         // agregar atributos

         if(objNode.attributes) {

                 var Attribute;

                 var oNodeList = objNode.attributes;

                 

                 for(var i = 0;i < oNodeList.length; i++) {

                         Attribute = oNodeList.item(i);

                         

                         var newNode;

                         newNode = ProcessDOMNode(Attribute,objCreator);

                         

                         objRoot.AppendChild(newNode);

                 }

         }

                         

         if(objNode.hasChildNodes)        {

                 try {

                         // agregar secundarios

                         var Item;

                         oNodeList = objNode.childNodes;

                         

                         for(var i = 0;i < oNodeList.length; i++) {

                                         Item = oNodeList.item(i);

                                       

                                 var newNode;

                                 newNode = ProcessDOMNode(Item,objCreator);

                                 

                                 objRoot.AppendChild(newNode);

                         }

                 }

                 catch(err) {

                 }

         }

 }

 

 return objRoot;

}

 

 

function CreateXMLDataFromDOMNode(objNode,objCreator)

{

 var bSetName = true;

 var bSetValue = true;

 

 var nKind = 4;

 

 switch(objNode.nodeType)        {

         case 2:nKind = 5;break;

         case 3:nKind = 6;bSetName = false;break;

         case 4:nKind = 7;bSetName = false;break;

         case 8:nKind = 8;bSetName = false;break;

         case 7:nKind = 9;break;

 }

 

 var objNew = null;

 objNew = objCreator.CreateChild(nKind);        

 

 if(bSetName)

         objNew.Name = objNode.nodeName;

 

 if(bSetValue && (objNode.nodeValue != null))

         objNew.TextValue = objNode.nodeValue;

                 

 return objNew;

}

 

 

Conversión de XMLData en DOM

El siguiente código muestra cómo convertir segmentos XMLData en DOM.

 

////////////////////////////////////////////////////////////////

// conversión de segmentos XMLData en DOM

 

function ProcessXMLDataNode(objXMLData,xmlDoc)

{

 var objRoot;

 objRoot = CreateDOMNodeFromXMLData(objXMLData,xmlDoc);

 

 if(objRoot)        {                

         if(IsTextNodeEnabled(objRoot) && (objXMLData.TextValue.length > 0))

                 objRoot.appendChild(xmlDoc.createTextNode(objXMLData.TextValue));

         

         if(objXMLData.HasChildren)        {

                 try {

                         var objChild;

                         objChild = objXMLData.GetFirstChild(-1);

                 

                         while(true)        {

                                 if(objChild)        {

                                         var newNode;

                                         newNode = ProcessXMLDataNode(objChild,xmlDoc);

                                         

                                         if(newNode.nodeType == 2)        {

                                                 // el nodo secundario es un atributo

                                                 objRoot.attributes.setNamedItem(newNode);

                                         }

                                         else

                                                 objRoot.appendChild(newNode);

                                 }

                                 

                                 objChild = objXMLData.GetNextChild();

                         }

                 }

                 catch(err) {

                 }

         }

 }

 

 return objRoot;

}

 

function CreateDOMNodeFromXMLData(objXMLData,xmlDoc)

{

 switch(objXMLData.Kind)        {

         case 4:return xmlDoc.createElement(objXMLData.Name);

         case 5:return xmlDoc.createAttribute(objXMLData.Name);

         case 6:return xmlDoc.createTextNode(objXMLData.TextValue);

         case 7:return xmlDoc.createCDATASection(objXMLData.TextValue);

         case 8:return xmlDoc.createComment(objXMLData.TextValue);

         case 9:return xmlDoc.createProcessingInstruction(objXMLData.Name,objXMLData.TextValue);

 }

 

 return xmlDoc.createElement(objXMLData.Name);

}

 

function IsTextNodeEnabled(objNode)

{

 switch(objNode.nodeType) {

         case 1:

         case 2:

         case 5:

         case 6:

         case 11:return true;

 }

 

 return false;

}

 


© 2019 Altova GmbH