Adobe 0046100128056 Scripting Guide - Page 203

Creating Tables using XML Rules

Page 203 highlights

CHAPTER 13: XML Rules Creating Tables using XML Rules 203 //Creates a new text frame at the top of the page to contain the "type" XML element. function ProcessType(){ this.name = "ProcessType"; this.xpath = "/devices/device/type"; this.apply = function(myElement, myRuleProcessor){ var myDocument = app.documents.item(0); with(myElement){ var myBounds = myGetBounds(myDocument, myDocument.pages.item(-1)); myBounds = [myBounds[0]-24, myBounds[1], myBounds[0], myBounds[2]]; var myTextFrame = placeIntoFrame(myPage, myBounds); applyParagraphStyle(myDocument.paragraphStyles.item("DeviceType")); myTextFrame.textFramePreferences.insetSpacing = [6, 6, 6, 6]; myTextFrame.fillColor = myDocument.swatches.item("Red") } return true; } } Creating Tables using XML Rules You can use the convertElementToTable method to turn an XML element into a table. This method has a limitation in that it assumes that all of the XML elements inside the table conform to a very specific set of XML tags-one tag for a row element; another for a cell, or column element. Typically, the XML data we want to put into a table does not conform to this structure: it is likely that the XML elements we want to arrange in columns use heterogeneous XML tags (price, part number, etc.). To get around this limitation, we can "wrap" each XML element we want to add to a table row using a container XML element, as shown in the following script fragments (see XMLRulesTable). In this example, a specific XML rule creates an XML element for each row. function ProcessDevice(){ this.name = "ProcessDevice"; this.xpath = "//device[@type = 'VCO']"; this.apply = function(myElement, myRuleProcessor){ var myNewElement = myContainerElement.xmlElements.add( app.documents.item(0).xmlTags.item("Row")); return true; } } Successive rules move and format their content into container elements inside the row XML element.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209

C
HAPTER
13: XML Rules
Creating Tables using XML Rules
203
//Creates a new text frame at the top of the page to contain the "type" XML element.
function ProcessType(){
this.name = "ProcessType";
this.xpath = "/devices/device/type";
this.apply = function(myElement, myRuleProcessor){
var myDocument = app.documents.item(0);
with(myElement){
var myBounds = myGetBounds(myDocument, myDocument.pages.item(-1));
myBounds = [myBounds[0]-24, myBounds[1], myBounds[0], myBounds[2]];
var myTextFrame = placeIntoFrame(myPage, myBounds);
applyParagraphStyle(myDocument.paragraphStyles.item("DeviceType"));
myTextFrame.textFramePreferences.insetSpacing = [6, 6, 6, 6];
myTextFrame.fillColor = myDocument.swatches.item("Red")
}
return true;
}
}
Creating Tables using XML Rules
You can use the
convertElementToTable
method to turn an XML element into a table. This method has a
limitation in that it assumes that all of the XML elements inside the table conform to a very specific set of
XML tags—one tag for a row element; another for a cell, or column element. Typically, the XML data we
want to put into a table does not conform to this structure: it is likely that the XML elements we want to
arrange in columns use heterogeneous XML tags (price, part number, etc.).
To get around this limitation, we can “wrap” each XML element we want to add to a table row using a
container XML element, as shown in the following script fragments (see XMLRulesTable). In this example, a
specific XML rule creates an XML element for each row.
function ProcessDevice(){
this.name = "ProcessDevice";
this.xpath = "//device[@type = 'VCO']";
this.apply = function(myElement, myRuleProcessor){
var myNewElement = myContainerElement.xmlElements.add(
app.documents.item(0).xmlTags.item("Row"));
return true;
}
}
Successive rules move and format their content into container elements inside the row XML element.