DOM und XMLData

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Benutzerreferenz > Mechanismen >

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, wenn Sie von einer externen Quelle darauf zugreifen können oder 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 in XMLData

Im nachstehenden Code wird gezeigt, wie Sie DOM in XMLData konvertieren.

 

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

// 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 in DOM

Im nachstehenden Code wird gezeigt, wie Sie XMLData in DOM konvertieren.

 

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

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

}

 


© 2019 Altova GmbH