Adobe 0046100128056 Scripting Guide - Page 183

Handling multiple matching rules, XPath limitations, Inserting a parent XML element

Page 183 highlights

CHAPTER 13: XML Rules Overview 183 X Inserting a parent XML element - To add an ancestor XML element to the matched XML element, do so after processing the current XML element. The ancestor XML element you add is not processed by the XML-rules processor during this rule iteration (as it appears "above" the current element in the hierarchy). X Deleting the current XML element - You cannot delete or move the matched XML element until any child XML elements contained by the element are processed. To make this sort of change, use the __skipChildren function before making the change. X No repetitive processing - Changes to nodes that were already processed will not cause the XML rule to be evaluated again. Handling multiple matching rules When multiple rules match an XML element, the XML-rules processor can apply some or all of the matching rules. XML rules are applied in the order in which they appear in the rule set, up to the point that one of the rule apply functions returns true. In essence, returning true means the element was processed. Once a rule returns true, any other XML rules matching the XML element are ignored. You can alter this behavior and allow the next matching rule to be applied, by having the XML rule apply function return false. When an apply function returns false, you can control the matching behavior of the XML rule based on a condition other than the XPath property defined in the XML rule, like the state of another variable in the script. XPath limitations InDesign's XML rules support a limited subset of the XPath 1.0 specification, specifically including the following capabilities: X Find an element by name, specifying a path from the root; for example, /doc/title. X Find paths with wildcards and node matches; for example, /doc/*/subtree/node(). X Find an element with a specified attribute that matches a specified value; for example, /doc/para[@font='Courier']. X Find an element with a specified attribute that does not match a specified value; for example, /doc/para[@font !='Courier']. X Find a child element by numeric position (but not last()); for example, /doc/para[3]. X Find self or any descendent; for example, //para. X Find comment as a terminal; for example, /doc/comment(). X Find PI by target or any; for example, /doc/processing-instruction('foo'). X Find multiple predicates; for example, /doc/para[@font='Courier'][@size=5][2]. X Find along following-sibling axes; for example, /doc/note/following-sibling::*. Due to the one-pass nature of this implementation, the following XPath expressions are specifically excluded: X No ancestor or preceding-sibling axes, including .., ancestor::, preceding-sibling::.

  • 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
Overview
183
X
Inserting a parent XML element
— To add an ancestor XML element to the matched XML element,
do so after processing the current XML element. The ancestor XML element you add is not processed
by the XML-rules processor during this rule iteration (as it appears “above” the current element in the
hierarchy).
X
Deleting the current XML element
— You cannot delete or move the matched XML element until
any child XML elements contained by the element are processed. To make this sort of change, use the
__skipChildren
function before making the change.
X
No repetitive processing —
Changes to nodes that were already processed will not cause the XML
rule to be evaluated again.
Handling multiple matching rules
When multiple rules match an XML element, the XML-rules processor can apply some or all of the
matching rules. XML rules are applied in the order in which they appear in the rule set, up to the point that
one of the rule
apply
functions returns
true
. In essence, returning
true
means the element was
processed. Once a rule returns
true
, any other XML rules matching the XML element are ignored. You can
alter this behavior and allow the next matching rule to be applied, by having the XML rule
apply
function
return
false
.
When an
apply
function returns
false
, you can control the matching behavior of the XML rule based on a
condition other than the
XPath
property defined in the XML rule, like the state of another variable in the
script.
XPath limitations
InDesign’s XML rules support a limited subset of the XPath 1.0 specification, specifically including the
following capabilities:
X
Find an element by name, specifying a path from the root; for example,
/doc/title
.
X
Find paths with wildcards and node matches; for example,
/doc/*/subtree/node()
.
X
Find an element with a specified attribute that matches a specified value; for example,
/doc/para[@font='Courier']
.
X
Find an element with a specified attribute that does not match a specified value; for example,
/doc/para[@font !='Courier']
.
X
Find a child element by numeric position (but not
last()
); for example,
/doc/para[3]
.
X
Find self or any descendent; for example,
//para
.
X
Find comment as a terminal; for example,
/doc/comment()
.
X
Find PI by target or any; for example,
/doc/processing-instruction('foo')
.
X
Find multiple predicates; for example,
/doc/para[@font='Courier'][@size=5][2]
.
X
Find along following-sibling axes; for example,
/doc/note/following-sibling::*
.
Due to the one-pass nature of this implementation, the following XPath expressions are specifically
excluded:
X
No ancestor or preceding-sibling axes, including
..
,
ancestor::
,
preceding-sibling::
.