DOM und XML Data

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

Startseite >  Referenz für Programmierer > Applikations-API > Übersicht >

DOM und XML Data

Über die XMLData Schnittstelle haben Sie Zugriff auf die gesamte XML-Struktur, die dem aktuellen Dokument zugrunde liegt. Sie benötigen dafür weniger Methoden als DOM und der Zugriff ist einfacher. Die XMLData Schnittstelle ist eine möglichst einfache Methode, um vorhandene oder neu erstellte XML-Daten zu lesen und zu bearbeiten. Eventuell sollten Sie jedoch eine DOM-Struktur verwenden, weil Sie auf diese von einer externen Quelle aus zugreifen können oder weil Sie die MSXML DOM-Implementierung vorziehen.

 

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

 

Um die ProcessDOMNode() Funktion zu verwenden:

übergeben Sie das Root-Element des zu konvertierenden DOM-Segments in objNode und
übergeben Sie das Plugin-Objekt mit der CreateChild() Methode in objCreator

 

Um die ProcessXMLDataNode() Funktion zu verwenden:

übergeben Sie das Root-Element des XMLData-Segments in objXMLData und
übergeben Sie das mit MSXML in xmlDoc erstellte DOMDocument

 

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

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

}


© 2019 Altova GmbH