3

私はいくつかの省略形の js 変数を作成しています。これは最終的に親にマージされ、XML が作成されます。ここで私の速記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>
4

3 に答える 3

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(email) を使用して、Web ブラウザーの構造の違いを確認できます。

これはまた、同じことがより読みやすくなります

attachments = ["attachments"];
attachments.push(attachment1);
attachments.push(attachment2);
var email = [ "email",
              [ "subject", "mySubject"],
              [ "body", "myBody"],
              attachments
            ];
于 2012-09-30T22:07:46.243 に答える
1

エラーは次の行にあります。

[ "attachments", attachments ]

これが効果的に行うことは次のとおりです。

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

正しいものは次のとおりです。

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

1つの解決策は次のとおりです。

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
            ];
于 2012-09-29T00:24:36.693 に答える
0

GAS で XML を作成するには、 E4X 拡張機能を使用することをお勧めします。ここに例があります。getOrgXMLと関数の両方createXMLFromCodeが同じ 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;
}
于 2012-09-30T08:31:09.990 に答える