2015-09-14 2 views
-1

Я пытаюсь создать XML-код с использованием JavaScript в дополнение к Firefox и проблемы с ним.Создать XML с элементами и атрибутами в дополнении Firefox

Ниже формат XML Я ищу:

<testing> 
    <testingOne attr="my_attrib"> 
     <TestingTwo>abc</TestingTwo > 
     <TestingThree>bbc</TestingThree> 
    </testingOne > 
</testing> 

Я попытался с помощью кода ниже. Но это не работает.

var XML = document.createElement("div"); 
var Node = document.createElement("testing"); 
Node.appendChild(document.createElement("testingOne")); 
var a = document.createAttribute("my_attrib"); 

node.setAttributeNode(a); 

Node.appendChild(document.createElement("TestingTwo")); 
Node.appendChild(document.createElement("TestingThree")); 
XML.appendChild(Node); 

alert(XML.innerHTML); 

Как я могу создать XML так же, как в приведенном выше примере, используя JavaScript в дополнении Firefox?

+1

Пример «формат XML», который вы предоставите не представляется (например, ни один из 'test',' testingOne', 'TestingTwo',' TestingThree', 'my_attrib' не существует в« формате XML »и' sub', 'sub1',' abc' , 'bbc' не существует в вашем коде). Пожалуйста, измените тот или другой, чтобы отразить то, что вы делаете, или то, что вы говорите, что хотите. Как бы то ни было, нам пришлось бы приложить гораздо больше усилий, чтобы попытаться угадать, что вы на самом деле хотели, а не просто взглянуть на код/​​пример и сказать, что это где-то неправильно. – Makyen

+0

Изменен пример соответствия друг другу ... не могли бы вы мне помочь? – testerBDD

+0

BTW: Если вы хотите, чтобы кто-то из вас уведомил вас о вашем комментарии, вам нужно включить их ID в свой комментарий с помощью @ перед ним. Например, для меня это будет @Makyen. Если вы сделаете это в первую очередь в своем комментарии, система предоставит автозаполненные предложения от тех, кто уже опубликовал комментарии к этому ответу/вопросу. Оригинальный плакат ответа/вопроса, на который вы комментируете, всегда будет уведомлен. Этот [мета-пост] (http://meta.stackexchange.com/a/43020/271271) содержит дополнительную информацию. В этом случае я не видел ваших комментариев почти год. – Makyen

ответ

1

Вы желаете, чтобы создать дерево XML DOM с помощью JavaScript в Firefox Add-на. Выполнение этого в дополнении Firefox несколько сложнее, чем форма JavaScript, запущенная на веб-странице. Причина этого в том, что переменные window и document не гарантируются. Даже если они установлены, они, вероятно, не настроены на то, что вы ожидаете от них. Дополнения Firefox имеют дело с несколькими окнами и несколькими документами. Таким образом, если вы используете переменные window и document, вы всегда должны быть уверены, что они настроены так, как вы их предполагали.

В этом примере мы просто находим основной элемент <window> из недавно использованного окна Firefox и элемент <document>, связанный с вкладкой, отображаемой в данный момент.

Следующий код, который будет производить XML вы хотите:

function createDesiredXMLElements() { 
    //To create elements, we need a <document>. To find a <document> we need a <window>. 
    //This gets the currently active Firefox XUL window. 
    // Add/remove a "/" to comment/un-comment the code appropriate for your add-on type. 
    //* Add-on SDK: 
    let activeWindow = require('sdk/window/utils').getMostRecentBrowserWindow(); 
    //*/ 
    /* Overlay and bootstrap (from almost any context/scope): 
    Components.utils.import("resource://gre/modules/Services.jsm");//Services 
    let activeWindow=Services.wm.getMostRecentWindow("navigator:browser");   
    //*/ 
    //Get the HTML document for the currently displayed tab in the current Firefox window. 
    let contentDoc = activeWindow.content.document; 
    //To create XML elements, we need an XML document. We could do it without creating 
    // an XML document. But, then we would need to use createElementNS() to specify 
    // the XML namespace for each element. This way, they inherit the xmlDoc's namespace. 
    let xmlNS = "http://www.w3.org/XML/1998/namespace"; 
    let xmlDoc = contentDoc.implementation.createDocument(xmlNS,"document"); 

    //Create the XML elements/nodes/attribute and add text. 
    let testing = xmlDoc.createElement("testing"); 
    let testingOne = xmlDoc.createElement("testingOne"); 
    testingOne.setAttribute("attr","my_attrib"); 
    let testingTwo = xmlDoc.createElement("TestingTwo"); 
    testingTwo.textContent = "abc"; 
    let testingThree = xmlDoc.createElement("TestingThree"); 
    testingThree.textContent = "bbc"; 
    //Place the elements as children of each appropriate node. 
    testing.appendChild(testingOne); 
    testingOne.appendChild(testingTwo); 
    testingOne.appendChild(testingThree); 
    //Show the alert. Note that the alert function is a method of a <window>: 
    activeWindow.alert(testing.outerHTML); 
} 

Оповещение производится этот код выглядит следующим образом:
Alert of desired XML

Смежные вопросы