javascript - 在 SpiderMonkey javascript 1.8 中处理 XML DOM - 函数appendChild(childnode)

标签 javascript enterprise-architect spidermonkey


我正在尝试在名为 Enterprise Architect ver 13.0.1310(编辑者:Sparx Systems)的产品中编写一个脚本(JavaScript)。 Enterprise Architect 旨在管理 UML 模型。
Sparx Systems 表示 Enterprise Architect 内置了 SpiderMonkey Javascript 1.8 引擎。
但是,当我尝试执行:parentNode.appendChild(childNode)时,EA 表示函数appendChild() 不存在。

  • 有人知道如何使用 SpiderMonkey 1.8 处理 XML DOM 吗?

  • 有谁知道我怎样才能做同样的事情 SpiderMonkey 1.8 中的appendChild(childnode) ?也许另一个 功能?

  • 在哪里可以找到
    的引用资料和可用功能 蜘蛛猴 1.8?
  • 您有一些为以下内容编写的脚本(JAVASCRIPT)示例吗? 蜘蛛猴 1.8 ?

    谨致问候

以下是在 Enterprise Architect 中无缝运行的 JScript(不是 JavaScript)代码:

// ==========================================
//  GLOBAL DEFINITIONS
// ==========================================
var DIAGRAM_OT        = 8;

var SEARCH_SPECIFICATION = "<ReportViewData>" +
                            "<Fields>" +
                            "<Field name=\"CLASSGUID\" />" +
                            "<Field name=\"CLASSTABLE\" />" +
                            "<Field name=\"CLASSTYPE\" />" +
                            "<Field name=\"ID\" />" +
                            "<Field name=\"Name\" />" +
                            "<Field name=\"Type\" />" +
                            "<Field name=\"Stéréotype\" />" +                           
                            "<Field name=\"Notes\" />" +
                            "<Field name=\"Source\" />" +
                            "<Field name=\"Type_Source\" />" +
                            "<Field name=\"Destination\" />" +
                            "<Field name=\"Type_Destination\" />" +
                            "<Field name=\"Direction\" />" +
                            "<Field name=\"Source Aggregation\" />" +
                            "<Field name=\"Source Cardinality\" />" +
                            "<Field name=\"Source Role\" />" +
                            "<Field name=\"Destination Aggregation\" />" +
                            "<Field name=\"Destination Cardinality\" />" +
                            "<Field name=\"Destination Role\" />" +
                            "</Fields>" +
                            "<Rows/>" +
                            "</ReportViewData>";


function ListDiagramConnectors() {

    var treeSelectedType;
    var theDiagram as EA.Diagram;
    var xmlDOM;

    /* 
    * Vérifie que la fenetre "System Output" (Console) est visible.
    * Ouvre la fenetre "System Output" (Console) si nécessaire.
    */
    Repository.EnsureOutputVisible( "Script" );

    Session.Output( "JScript: List Diagram Relationships" );
    Session.Output( "=========================================" );



    treeSelectedType = Repository.GetTreeSelectedItemType();


    switch ( treeSelectedType )
    {

        case DIAGRAM_OT:
        {

            theDiagram = Repository.GetTreeSelectedObject();


            xmlDOM = creerEtRetournerXMLDOM();

            Session.Output( "Working on diagram '" + theDiagram.Name + "' (Type=" +
            theDiagram.Type + ", ID=" + theDiagram.DiagramID + ")" );


            /* ***************************************************************************/
            /* function XMLDOM.loadXML(String pXML) : 
             * Fonction JScript.
             * charge un fichier XML fourni 
             * sous forme de String dans un XMLDOM. 
             * @pXML : String : contenu XML.
             * @return : boolean : true si le chargement dans le DOM s'est bien déroulé.
             */
            /* ***************************************************************************/          
            /* Charge la structure fournie dans la String 
             * SEARCH_SPECIFICATION dans le DOM XML xmlDOM. */
            if( xmlDOM.loadXML(SEARCH_SPECIFICATION) )
            {

                /* Se positionne sur la racine des enregistrements ROWS dans le DOM. */
                var nodeRows = xmlDOM.selectSingleNode( "//ReportViewData//Rows" );

                /*
                 * Un connecteur a une relation un-a-plusieurs avec t_diagram.
                 * [t_connector] - [t_diagramlinks] - [t_diagram].
                 * Un connecteur peut apparaitre sur plusieurs diagrammes.
                 * L'objet DiagramLink représente une instance d'un connecteur sur un diagramme (lien).
                 * Un DIagramLink contient des propriétés comme la visibilité du connecteur, sa géométrie, ...
                 */
                // Récupère la EA.Collection de liens diagramLinks
                // pour le diagramme sélectionné dans le Project Browser.
                var diagramLinks as EA.Collection;
                diagramLinks = theDiagram.DiagramLinks;

                /* ************************************************** */
                /* PARCOURS D'UNE EA.COLLECTION EN JScript : INDICE.  */
                /* ************************************************** */                    
                for ( var i = 0 ; i < diagramLinks.Count ; i++ )
                {
                    /* Récupère le lien EA.DiagramLink en cours. */
                    var currentLink as EA.DiagramLink;
                    currentLink = diagramLinks.GetAt( i );

                    /* Récupère le connecteur dans le lien. */
                    var correspondingConnector as EA.Connector;
                    correspondingConnector = Repository.GetConnectorByID( currentLink.ConnectorID );

                    /* Ajoute un enregistrement (ROW) correspondant au connecteur 
                     * sous la balise Rows. */
                    AddRow(xmlDOM, nodeRows, correspondingConnector);    
                }

                /* **************************************************************** */
                /* Fonction EA RepositoryRunModelSearch( "", "", "", xmlDOM.xml ) : */
                /* **************************************************************** */              
                /* Ouvre et Remplit la fenetre de Requete 'Find In Project'. */
                Repository.RunModelSearch( "", "", "", xmlDOM.xml );

            }
            else
            {
                Session.Prompt( "Impossible de charger SEARCH_SPECIFICATION", 0 );
            }

            break;
        }
        default:
        {
            // Error message
            Session.Prompt( "Ce script ne fonctionne que si vous sélectionnez un DIAGRAMME dans le Project Browser", 0 );
        }
    }

    Session.Output( "FINI !" );

} // Fin de function ListDiagramConnectors().__________________________________________________________________



/*
 * **********************************************************************************
 * function creerEtRetournerXMLDOM() :
 * CREATION D'UN XMLDOM en JScript. - new ActiveXObject( "MSXML2.DOMDocument.4.0" )
 *
 * @return : Document Object Model (DOM).
 */
function creerEtRetournerXMLDOM() {

    var xmlDOM;

    xmlDOM = new ActiveXObject( "MSXML2.DOMDocument.4.0" );
    xmlDOM.validateOnParse = false;
    xmlDOM.async = false;

    return xmlDOM;

} // Fin de function creerEtRetournerXMLDOM()._________________________________________



/*
 * *************************************************************************************
 * function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) :
 * Ajoute un enregistrement (balise ROW) correspondant à un connecteur pConnector 
 * sous le noeud pRacineEnregistrements du DOM pXmlDOM.
 *
 * @pXmlDOM : DOM XML.
 * @pRacineEnregistrements : node (balise) sous laquelle il faut insérer 
 * les enregistrements dans le DOM pXmlDOM.
 * @pConnector : EA.Connector : Connecteur dont on veut ajouter 
 * les caractéristiques dans le DOM XML.
 */
function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) {

    /* Cast le paramètre pConnector pour bénéficier 
     * de la complétion (intellisense). */
    var connector as EA.Connector;

    connector = pConnector;

    var row;
    var source as EA.Element; /* Source du connecteur. */
    var sourceEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté source du connecteur. */
    var destination as EA.Element;  /* Destination du connecteur. */
    var destinationEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté destination du connecteur. */
    var guid = ""; /* ConnectorGUID. */
    var type = ""; /* Connector_Type. */
    var id = ""; /* Connector_ID. */
    var nom = ""; /* Nom du Connecteur. */
    var stereotype = ""; /* Stéréotype du Connecteur. */
    var notes = ""; /* Notes du Connecteur. */
    var direction = ""; /* Direction du Connecteur; */

    /* Crée un élément (balise) "ROW". */
    /* FONCTION JScript createElement("Row"). */
    row = pXmlDOM.createElement("Row");

    /* Récupère les caractéristiques du connecteur. */
    guid = connector.ConnectorGUID;
    type = connector.MetaType;
    nom = connector.Name;
    id = connector.ConnectorID;
    stereotype = connector.Stereotype;
    notes = connector.Notes;
    direction = connector.Direction;

    /* Récupère les caractéristiques de la source du connecteur. */    
    source = Repository.GetElementByID( connector.ClientID );
    sourceEnd = connector.ClientEnd;

    /* Récupère les caractéristiques de la destination du connecteur. */
    destination = Repository.GetElementByID( connector.SupplierID );
    destinationEnd = connector.SupplierEnd;

    /* *********************************************** */
    /* CONSTITUTION D'UN ENREGISTREMENT (ROW). */
    /* *********************************************** */
    /* Ajoute toutes les caractéristiques du connecteur 
     * dans des balises sous un noeud ROW. */
    AddField( pXmlDOM, row, "CLASSGUID", guid );
    AddField( pXmlDOM, row, "CLASSTABLE", "t_connector" );
    AddField( pXmlDOM, row, "CLASSTYPE", type );
    AddField( pXmlDOM, row, "ID", id );
    AddField( pXmlDOM, row, "Name", nom );
    AddField( pXmlDOM, row, "Type", type );
    AddField( pXmlDOM, row, "Stereotype", stereotype );
    AddField( pXmlDOM, row, "Notes", notes );
    AddField( pXmlDOM, row, "Source", source.Name );
    AddField( pXmlDOM, row, "Type_Source", source.MetaType );
    AddField( pXmlDOM, row, "Destination", destination.Name );
    AddField( pXmlDOM, row, "Type_Destination", destination.MetaType );
    AddField( pXmlDOM, row, "Direction", direction );
    AddField( pXmlDOM, row, "Source Aggregation", sourceEnd.Aggregation );
    AddField( pXmlDOM, row, "Source Cardinality", sourceEnd.Cardinality );
    AddField( pXmlDOM, row, "Source Role", sourceEnd.Role );
    AddField( pXmlDOM, row, "Destination Aggregation", destinationEnd.Aggregation );
    AddField( pXmlDOM, row, "Destination Cardinality", destinationEnd.Cardinality );
    AddField( pXmlDOM, row, "Destination Role", destinationEnd.Role );


    /* Ajoute un noeud ROW sous la racine des enregistrements. */
    pRacineEnregistrements.appendChild( row );

} // Fin de function AddRow(pXmlDOM, pRacineEnregistrements, pConnector).__________________________




/*
 * **************************************************************************************************
 * AJOUT D'UNE BALISE (ELEMENT) EN JScript.
 * **************************************************************************************************
 * function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) :
 * Ajoute un Element (balise) 'Field' à l'Element pRow d'un DOM pXmlDOM.
 * Ajoute deux attributs 'name' et 'value' à l'Element 'Field ajouté.
 * Fixe la valeur des attributs ajoutés à pNomDuChamp et pValeurDuChamp comme suit :
 * <Field name="pNomDuChamp" value="pValeurDuChamp"/>.
 * Par exemple :
 * <Field name="Stereotype" value="Realization"/>.
 *
 * @pXmlDOM : Document Objet Model (DOM).
 * @pRow : Node : Balise (Element) de pXmlDOM à laquelle on ajoute l'Element 'Field' créé.
 * @pNomDuChamp : String : valeur à attribuer à l'attribut 'name' de l'Element 'Field' créé.
 * @pValeurDuChamp : String : valeur à attribuer à l'attribut 'value' de l'Element 'Field' créé.
 */
function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) {

    /* Crée une balise (Element) 'Field'. */
    var fieldNode = pXmlDOM.createElement("Field");

    /* Crée un premier attribut 'name'. */
    var nameAttribute = pXmlDOM.createAttribute("name");
    /* passe la valeur pNomDuChamp à l'attribut 'name'. */
    nameAttribute.value = pNomDuChamp;
    /* Ajoute l'attribut valué 'name' à la collection d'attributs de la balise 'Field'. */
    fieldNode.attributes.setNamedItem(nameAttribute);

    /* Crée un second attribut 'value'. */
    var valueAttribute = pXmlDOM.createAttribute("value");
    /* passe la valeur pValeurDuChamp à l'attribut 'value'. */
    valueAttribute.value = pValeurDuChamp;
    /* Ajoute l'attribut valué 'value' à la collection d'attributs de la balise 'Field'. */
    fieldNode.attributes.setNamedItem(valueAttribute);

    /* Ajoute la balise 'Field' nouvellement créée comme enfant de pRow. */
    pRow.appendChild( fieldNode );

} // Fin de function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp)._________________




ListDiagramConnectors();
</code>

下面是相同脚本的代码,但使用的是 JavaScript。此代码无法在 Enterprise Architect 13.0.1310 中运行,因为未定义函数appendChild(childNode):

<code>
// ==========================================
//  GLOBAL DEFINITIONS
// ==========================================
/* Object_type d'un Diagram == 8 dans EA. */
var DIAGRAM_OT        = 8;


/* String XML qui définit les champs qui apparaitront 
 * dans la fenetre 'Find In Project' 
 * et la forme d'un fichier XML correspondant à une requete Search. */
var SEARCH_SPECIFICATION = "<ReportViewData>" +
                            "<Fields>" +
                            "<Field name=\"CLASSGUID\" />" +
                            "<Field name=\"CLASSTABLE\" />" +
                            "<Field name=\"CLASSTYPE\" />" +
                            "<Field name=\"ID\" />" +
                            "<Field name=\"Name\" />" +
                            "<Field name=\"Type\" />" +
                            "<Field name=\"Stéréotype\" />" +                           
                            "<Field name=\"Notes\" />" +
                            "<Field name=\"Source\" />" +
                            "<Field name=\"Type_Source\" />" +
                            "<Field name=\"Destination\" />" +
                            "<Field name=\"Type_Destination\" />" +
                            "<Field name=\"Direction\" />" +
                            "<Field name=\"Source Aggregation\" />" +
                            "<Field name=\"Source Cardinality\" />" +
                            "<Field name=\"Source Role\" />" +
                            "<Field name=\"Destination Aggregation\" />" +
                            "<Field name=\"Destination Cardinality\" />" +
                            "<Field name=\"Destination Role\" />" +
                            "</Fields>" +
                            "<Rows/>" +
                            "</ReportViewData>";




/*
 * ***************************************************************************************************
 * function ListDiagramConnectors() :
 * Main function.
 * Liste l'ensemble des connecteurs présents dans un diagramme sélectionné dans le Project Browser.
 * Le résultat est affiché dans la fenetre de Requete 'Find In Project'.
 * Cette fenetre 'Find In Project' s'ouvre automatiquement.
 */
function ListDiagramConnectors() {

    var treeSelectedType;
    var theDiagram as EA.Diagram;
    var xmlDOM;

    /* 
    * Vérifie que la fenetre "System Output" (Console) est visible.
    * Ouvre la fenetre "System Output" (Console) si nécessaire.
    */
    Repository.EnsureOutputVisible( "Script" );

    Session.Output( "JScript: List Diagram Relationships" );
    Session.Output( "=========================================" );


    /* ********************************************************************** */
    /* RECUPERATION DU TYPE DE L'OBJET SELECTIONNE DANS LE PROJECT BROWSER.   */
    /* FONCTION EA13 Repository.GetTreeSelectedItemType().                    */
    /* ********************************************************************** */
    /* Récupère le type de l'objet sélectionné dans le Project Browser. */
    /* Ce type est un entier. */
    treeSelectedType = Repository.GetTreeSelectedItemType();

    /* ********************************* */
    /* SELECT CASE en JScript.           */
    /* ********************************* */
    /* Traitement du type d'objet sélectionné dans le Project Browser. */
    switch ( treeSelectedType )
    {
        /* Lorsqu'un diagramme est selectionné dans le ProjectBrowser. */
        case DIAGRAM_OT:
        {
            /* Récupération de l'objet sélectionné dans le Project Browser. */           
            theDiagram = Repository.GetTreeSelectedObject();

            /* Récupère un Document Object Model (DOM). */
            xmlDOM = creerEtRetournerXMLDOM();

            Session.Output( "Working on diagram '" + theDiagram.Name + "' (Type=" +
            theDiagram.Type + ", ID=" + theDiagram.DiagramID + ")" );


            /* ***************************************************************************/
            /* function XMLDOM.loadXML(String pXML) : 
             * Fonction JScript.
             * charge un fichier XML fourni 
             * sous forme de String dans un XMLDOM. 
             * @pXML : String : contenu XML.
             * @return : boolean : true si le chargement dans le DOM s'est bien déroulé.
             */
            /* ***************************************************************************/          
            /* Charge la structure fournie dans la String 
             * SEARCH_SPECIFICATION dans le DOM XML xmlDOM. */
            if( xmlDOM.loadXML(SEARCH_SPECIFICATION) )
            {

                /* Se positionne sur la racine des enregistrements ROWS dans le DOM. */
                var nodeRows = xmlDOM.selectSingleNode( "//ReportViewData//Rows" );

                /*
                 * Un connecteur a une relation un-a-plusieurs avec t_diagram.
                 * [t_connector] - [t_diagramlinks] - [t_diagram].
                 * Un connecteur peut apparaitre sur plusieurs diagrammes.
                 * L'objet DiagramLink représente une instance d'un connecteur sur un diagramme (lien).
                 * Un DIagramLink contient des propriétés comme la visibilité du connecteur, sa géométrie, ...
                 */
                // Récupère la EA.Collection de liens diagramLinks
                // pour le diagramme sélectionné dans le Project Browser.
                var diagramLinks as EA.Collection;
                diagramLinks = theDiagram.DiagramLinks;

                /* ************************************************** */
                /* PARCOURS D'UNE EA.COLLECTION EN JScript : INDICE.  */
                /* ************************************************** */                    
                for ( var i = 0 ; i < diagramLinks.Count ; i++ )
                {
                    /* Récupère le lien EA.DiagramLink en cours. */
                    var currentLink as EA.DiagramLink;
                    currentLink = diagramLinks.GetAt( i );

                    /* Récupère le connecteur dans le lien. */
                    var correspondingConnector as EA.Connector;
                    correspondingConnector = Repository.GetConnectorByID( currentLink.ConnectorID );

                    /* Ajoute un enregistrement (ROW) correspondant au connecteur 
                     * sous la balise Rows. */
                    AddRow(xmlDOM, nodeRows, correspondingConnector);    
                }

                /* **************************************************************** */
                /* Fonction EA RepositoryRunModelSearch( "", "", "", xmlDOM.xml ) : */
                /* **************************************************************** */              
                /* Ouvre et Remplit la fenetre de Requete 'Find In Project'. */
                Repository.RunModelSearch( "", "", "", xmlDOM.xml );

            }
            else
            {
                Session.Prompt( "Impossible de charger SEARCH_SPECIFICATION", 0 );
            }

            break;
        }
        default:
        {
            // Error message
            Session.Prompt( "Ce script ne fonctionne que si vous sélectionnez un DIAGRAMME dans le Project Browser", 0 );
        }
    }

    Session.Output( "FINI !" );

} // Fin de function ListDiagramConnectors().__________________________________________________________________



/*
 * **********************************************************************************
 * function creerEtRetournerXMLDOM() :
 * CREATION D'UN XMLDOM en JavaScript. - new COMObject( "MSXML2.DOMDocument" )
 *
 * @return : Document Object Model (DOM).
 */
function creerEtRetournerXMLDOM() {

    var xmlDOM;

    xmlDOM = new COMObject( "MSXML2.DOMDocument" );
    xmlDOM.validateOnParse = false;
    xmlDOM.async = false;

    return xmlDOM;

} // Fin de function creerEtRetournerXMLDOM()._________________________________________



/*
 * *************************************************************************************
 * function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) :
 * Ajoute un enregistrement (balise ROW) correspondant à un connecteur pConnector 
 * sous le noeud pRacineEnregistrements du DOM pXmlDOM.
 *
 * @pXmlDOM : DOM XML.
 * @pRacineEnregistrements : node (balise) sous laquelle il faut insérer 
 * les enregistrements dans le DOM pXmlDOM.
 * @pConnector : EA.Connector : Connecteur dont on veut ajouter 
 * les caractéristiques dans le DOM XML.
 */
function AddRow(pXmlDOM, pRacineEnregistrements, pConnector) {

    /* Cast le paramètre pConnector pour bénéficier 
     * de la complétion (intellisense). */
    var connector as EA.Connector;

    connector = pConnector;

    var row;
    var source as EA.Element; /* Source du connecteur. */
    var sourceEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté source du connecteur. */
    var destination as EA.Element;  /* Destination du connecteur. */
    var destinationEnd as EA.ConnectorEnd; /* ???  Semble contenir les propriétés (cardinalité, ...) du coté destination du connecteur. */
    var guid = ""; /* ConnectorGUID. */
    var type = ""; /* Connector_Type. */
    var id = ""; /* Connector_ID. */
    var nom = ""; /* Nom du Connecteur. */
    var stereotype = ""; /* Stéréotype du Connecteur. */
    var notes = ""; /* Notes du Connecteur. */
    var direction = ""; /* Direction du Connecteur; */

    /* Crée un élément (balise) "ROW". */
    /* FONCTION JavaScript createElement("Row"). */
    row = pXmlDOM.createElement("Row");

    /* Récupère les caractéristiques du connecteur. */
    guid = connector.ConnectorGUID;
    type = connector.MetaType;
    nom = connector.Name;
    id = connector.ConnectorID;
    stereotype = connector.Stereotype;
    notes = connector.Notes;
    direction = connector.Direction;

    /* Récupère les caractéristiques de la source du connecteur. */    
    source = Repository.GetElementByID( connector.ClientID );
    sourceEnd = connector.ClientEnd;

    /* Récupère les caractéristiques de la destination du connecteur. */
    destination = Repository.GetElementByID( connector.SupplierID );
    destinationEnd = connector.SupplierEnd;

    /* *********************************************** */
    /* CONSTITUTION D'UN ENREGISTREMENT (ROW). */
    /* *********************************************** */
    /* Ajoute toutes les caractéristiques du connecteur 
     * dans des balises sous un noeud ROW. */
    AddField( pXmlDOM, row, "CLASSGUID", guid );
    AddField( pXmlDOM, row, "CLASSTABLE", "t_connector" );
    AddField( pXmlDOM, row, "CLASSTYPE", type );
    AddField( pXmlDOM, row, "ID", id );
    AddField( pXmlDOM, row, "Name", nom );
    AddField( pXmlDOM, row, "Type", type );
    AddField( pXmlDOM, row, "Stereotype", stereotype );
    AddField( pXmlDOM, row, "Notes", notes );
    AddField( pXmlDOM, row, "Source", source.Name );
    AddField( pXmlDOM, row, "Type_Source", source.MetaType );
    AddField( pXmlDOM, row, "Destination", destination.Name );
    AddField( pXmlDOM, row, "Type_Destination", destination.MetaType );
    AddField( pXmlDOM, row, "Direction", direction );
    AddField( pXmlDOM, row, "Source Aggregation", sourceEnd.Aggregation );
    AddField( pXmlDOM, row, "Source Cardinality", sourceEnd.Cardinality );
    AddField( pXmlDOM, row, "Source Role", sourceEnd.Role );
    AddField( pXmlDOM, row, "Destination Aggregation", destinationEnd.Aggregation );
    AddField( pXmlDOM, row, "Destination Cardinality", destinationEnd.Cardinality );
    AddField( pXmlDOM, row, "Destination Role", destinationEnd.Role );


    /* Ajoute un noeud ROW sous la racine des enregistrements. */
    /* ************************************* */
    /* NE FONCTIONNE PAS EN JavaScript; !!!! */
    /* ************************************* */
    pRacineEnregistrements.appendChild( row );

} // Fin de function AddRow(pXmlDOM, pRacineEnregistrements, pConnector).__________________________




/*
 * **************************************************************************************************
 * AJOUT D'UNE BALISE (ELEMENT) EN JavaScript.
 * **************************************************************************************************
 * function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) :
 * Ajoute un Element (balise) 'Field' à l'Element pRow d'un DOM pXmlDOM.
 * Ajoute deux attributs 'name' et 'value' à l'Element 'Field ajouté.
 * Fixe la valeur des attributs ajoutés à pNomDuChamp et pValeurDuChamp comme suit :
 * <Field name="pNomDuChamp" value="pValeurDuChamp"/>.
 * Par exemple :
 * <Field name="Stereotype" value="Realization"/>.
 *
 * @pXmlDOM : Document Objet Model (DOM).
 * @pRow : Node : Balise (Element) de pXmlDOM à laquelle on ajoute l'Element 'Field' créé.
 * @pNomDuChamp : String : valeur à attribuer à l'attribut 'name' de l'Element 'Field' créé.
 * @pValeurDuChamp : String : valeur à attribuer à l'attribut 'value' de l'Element 'Field' créé.
 */
function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp) {

    /* Crée une balise (Element) 'Field'. */
    var fieldNode = pXmlDOM.createElement("Field");

    /* Crée un premier attribut 'name' et lui passe sa valeur pNomDuChamp. */
    fieldNode.setAttribute("name", pNomDuChamp);

    /* Crée un second attribut 'value' et lui passe sa valeur pValeurDuChamp. */
    fieldNode.setAttribute("value", pValeurDuChamp);

    /* Ajoute la balise 'Field' nouvellement créée comme enfant de pRow. */
    /* ************************************* */
    /* NE FONCTIONNE PAS EN JavaScript; !!!! */
    /* ************************************* */
    pRow.appendChild(fieldNode);

} // Fin de function AddField(pXmlDOM, pRow, pNomDuChamp, pValeurDuChamp)._________________




ListDiagramConnectors();
</code>

最佳答案

Does anybody knows how to handle a XML DOM with SpiderMonkey 1.8 ?

据我所知,Spidermonkey 不具备该功能,因为它是为没有 DOM 的应用程序开发的

Where can I found the references and available functions of SpiderMonkey 1.8 ? Do you have some examples of script (JAVASCRIPT) written for SpiderMonkey 1.8 ?

基本上,SpiderMonkey 与 JavaScript 相同,只是缺少 DOM 操作(和 XML)

Does anybody knows how I could do the same thing that appendChild(childnode) within SpiderMonkey 1.8 ? Maybe another function ?

您将需要使用 VBscript 或 Jscript(Jscript 是 Javascript 的 Microsoft 实现)。

Here's an example Jscript

 main();

function main()
{
  var dom = MakeDOM(null);

  try {  
    // Create a processing instruction targeted for xml.
    var node = dom.createProcessingInstruction("xml",
                                      "version='1.0'");
    dom.appendChild(node);
    node = null;
    ...

您的 ea 客户端的 EAScriptLib 组中有一个可用的库

关于javascript - 在 SpiderMonkey javascript 1.8 中处理 XML DOM - 函数appendChild(childnode),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570789/

相关文章:

生成器的 Javascript 堆栈模型

Javascript/JQuery - 单击时一次突出显示一个链接

javascript - lightSlider 不是函数,wordpress

javascript - 如何在 SpiderMonkey 中从 AST 生成 JavaScript 代码?

svn - 企业架构师和颠覆

enterprise-architect - 将关联类型更改为聚合会导致菱形符号位于错误的一侧

JavaScript 性能 : Modulus operation of negative Number within decrementing loop slowing the code by more than 100%

javascript - 在 JQuery 中使用一键打开/关闭的问题

javascript - 有限缩放的 d3 图

java - .EAP企业架构