xml spy
Zurück  Nach oben  Weiter

DOM und XMLData


Die XMLData-Schnittstelle bietet im Vergleich zu DOM weniger Methoden, ist um einiges einfacher und gibt Ihnen vollen Zugriff auf die XML-Struktur des aktuellen Dokuments. Die XMLData-Schnittstelle ist ein minimalistischer Lösungsansatz zum Lesen und Ändern bestehender oder neu erstellter XML-Daten. Sie können aber auch eine DOM-Struktur verwenden, weil Sie von einer externen Quelle darauf zugreifen können oder einfach die MSXML DOM-Implementierung bevorzugen.

 

Die nachfolgend beschriebenen Funktionen ProcessDOMNode() und ProcessXMLDataNode() konvertieren alle Segmente einer XML-Struktur zwischen XMLData und DOM.

 

So verwenden Sie die ProcessDOMNode()-Funktion:

Übergeben Sie das Root-Element des DOM-Segments, das Sie in objNode konvertieren möchten und
Übergeben Sie das Plug-In-Objekt mit der CreateChild()-Methode in objCreator.

 

So verwenden Sie die ProcessXMLDataNode()-Funktion:

Übergeben Sie das Root-Element des XMLData-Segments in objXMLData und
Übergeben Sie das mit MSXML in xmlDoc erzeugte DOMDocument-Objekt.

 

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

// DOM to XMLData conversion

 

function ProcessDOMNode(objNode,objCreator)

{

       var objRoot;

       objRoot = CreateXMLDataFromDOMNode(objNode,objCreator);

       

       if(objRoot)        {                

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

                       objRoot.TextValue = objNode.nodeValue;

               

               // add attributes

               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 {

                               // add children

                               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;

}

 

 

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

// XMLData to DOM conversion

 

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)        {

                                                       // child node is an attribute

                                                       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;

}


Zurück  Nach oben  Weiter

© 2007 Altova