2012-09-28 70 views
3

我創建了一些簡寫的js變量,最終將合併到父項中以創建一些XML。我在這裏用我的速記js做錯了什麼?我有點迷路。將速記JS添加到父項

我想出了這個簡單的例子來概括我的問題:

function testing() { 
    var attachments = []; 

    var attachment1 = [ "attachment" , 
        [ "name", "myname1" ], 
        [ "type", "mytype1" ] 
        ]; 
    attachments.push(attachment1); 
    var attachment2 = [ "attachment" , 
        [ "name", "myname2" ], 
        [ "type", "mytype2" ] 
        ]; 
    attachments.push(attachment2); 

    var email = [ "email", 
       [ "subject", "mySubject"], 
       [ "body", "myBody"], 
       [ "attachments", attachments ] 
       ]; 
    Logger.log(Xml.parseJS(email).toXmlString()); 
} 

日誌輸出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<email> 
    <subject>mySubject</subject> 
    <body>myBody</body> 
    <attachments>[Ljava.lang.Object;@b06f679</attachments> 
</email> 

理想的情況下,它應該是:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<email> 
    <subject>mySubject</subject> 
    <body>myBody</body> 
    <attachments> 
     <attachment> 
      <name>myname1</name> 
      <type>mytype1</type> 
     </attachment> 
     <attachment> 
      <name>myname2</name> 
      <type>mytype2</type> 
     </attachment> 
    </attachments> 
</email> 

回答

2

您正在將數組放入數組中。

var attachment1 = [ "attachment" , 
        [ "name", "myname1" ], 
        [ "type", "mytype1" ] 
        ]; 

var attachment2 = [ "attachment" , 
        [ "name", "myname2" ], 
        [ "type", "mytype2" ] 
        ]; 


var email = [ "email", 
      [ "subject", "mySubject"], 
      [ "body", "myBody"], 
      [ "attachments"] 
      ]; 
email[3].push(attachment1); 
email[3].push(attachment2); 

可以使用的console.log(電子郵件),以瞭解不同的結構,網頁瀏覽器

這也將同樣的事情更易讀

attachments = ["attachments"]; 
attachments.push(attachment1); 
attachments.push(attachment2); 
var email = [ "email", 
       [ "subject", "mySubject"], 
       [ "body", "myBody"], 
       attachments 
      ]; 
1

的錯誤是在此行:

[ "attachments", attachments ] 

什麼這實際上做的是:

[ "attachments", [ [attachment1], [attachment2] ] ] 

而正確的應該是:

[ "attachments", [attachment1], [attachment2] ] 

一個解決辦法是:

var email = [ "email", 
       [ "subject", "mySubject"], 
       [ "body", "myBody"], 
       [ "attachments", attachment1, attachment2 ] //<-- The attachment row must have two childs not one. 
      ]; 

另外,您可以按如下初始化附件數組:

var attachments = ['attachments'] 

然後按照上面的測試代碼推送附件。 最後,電子郵件是:

var email = [ "email", 
       [ "subject", "mySubject"], 
       [ "body", "myBody"], 
       attachments 
      ]; 
0

我建議使用E4X extension創造氣體的XML。這是一個例子。 getOrgXMLcreateXMLFromCode函數都創建相同的XML字符串。

function getOrgXML() { 
    var xml = <email> 
    <subject>mySubject</subject> 
    <body>myBody</body> 
    <attachments> 
     <attachment> 
      <name>myname1</name> 
      <type>mytype1</type> 
     </attachment> 
     <attachment> 
      <name>myname2</name> 
      <type>mytype2</type> 
     </attachment> 
    </attachments> 
    </email>; 
    return xml; 
} 

function createXMLFromCode() { 
    var attachment = <attachment/>; 
    attachment.name = ''; 
    attachment.type = ''; 
    var email = <email/>; 
    email.subject = 'mySubject'; 
    email.body = 'myBody'; 
    email.attachments = <attachments/>; 
    var attach1 = attachment.copy(); 
    attach1.name = 'myname1'; 
    attach1.type = 'mytype1'; 
    var attach2 = attachment.copy(); 
    attach2.name = 'myname2'; 
    attach2.type = 'mytype2'; 
    email.attachments.appendChild(attach1); 
    email.attachments.appendChild(attach2); 
    return email; 
} 

function testXML() { 
    var areEqual = getOrgXML().toXMLString() == createXMLFromCode().toXMLString(); 
    return areEqual; 
}