0

私は現在、Illustrator で多数のテキスト フィールドを持つアートワークを取得し、FileMaker XML ファイルからのデータで満たされたテキスト フィールドでアートアイテムを複製するスクリプトに取り組んでいます。注: これは Illustrator のエクステンド スクリプトですが、JavaScript との関連性が高いと確信しています。

これは、XML ファイルの最初のレコードです。

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
  <ERRORCODE>0</ERRORCODE>
  <PRODUCT BUILD="01-07-2009" NAME="FileMaker" VERSION="ProAdvanced 10.0v1"/>
  <DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="123" TIMEFORMAT=""/>
  <METADATA></METADATA>
  <RESULTSET FOUND="123">
    <ROW MODID="11" RECORDID="11116">
      <COL>
        <DATA>BB-1</DATA>
      </COL>
      <COL>
        <DATA>ELEVATOR</DATA>
      </COL>
      <COL>
        <DATA>MACHINE</DATA>
      </COL>
      <COL>
        <DATA>ROOM</DATA>
      </COL>
      <COL>
        <DATA>107</DATA>
      </COL>
      <COL>
        <DATA></DATA>
      </COL>
      <COL>
        <DATA></DATA>
      </COL>
      <COL>
        <DATA></DATA>
      </COL>
    </ROW>

そして、これが私に問題を引き起こしているブロックです:

//counts the amount of records in the XML = 123
var recordsLength = contents.elements().child(4).elements().length();

//counts the amount of data elements in each record = 8
var dataLength = contents.elements().child(4).elements().child(0).elements().length();

function drawArt() {

    //this loop iterates through each record; matches the groupitem name in illustrator to the first data element in the record; and duplicates the groupitem and positions it in the document.
    for (var i = 0; i < recordsLength; i++) {
        signType = contents.elements().child(4).elements().child(i).elements().child(0).child(0).text();
        gpTarget = docRef.groupItems.getByName(signType);
        newArt = gpTarget.duplicate();
        newArt.top = y;
        newArt.left = x;
        x+=(gpTarget.width + 20);
        redraw();

        //counts the amount of text fields in each newArt (i added - 1 to the end because there is always a text field at the end that should not be filled in)
        var txtFrmLength = newArt.textFrames.length - 1;

        //this loop iterates through each data element and gets the length of it
        for (var t = 1; t < dataLength; t++) {
            nodeLength = contents.elements().child(4).elements().child(i).elements().child(t).child(0).text().length();
            //this if statement looks to see if a data element contains data or is empty; if its not empty move to next loop; if it is, go back to first loop
            if(nodeLength > 0) {
                //this loop iterates through the text fields and fills in the data from the XML
                for (var u = 0; u < txtFrmLength; u++)
                    newSign.textFrames[u].contents = contents.elements().child(4).elements().child(i).elements().child(t).child(0).text();


                } else {
                   break;
                }

            }

    }

}
drawArt();
}

main();

基本的に、スクリプトはグループ アイテムを複製して配置し、XML からのデータをテキスト フィールドに入力してから、次のアイテムに移動する必要があります。

最初のループでテストを i < 2 に設定して、問題がどこにあるかを絞り込めるかどうかを確認しました。私が得ている結果は、複製された各artitemであり、そのすべてのテキストフィールドは5番目のデータノードで埋められています。

誰かが私が間違っていることを理解するのを手伝ってくれますか? ありがとう。

4

0 に答える 0