C
HAPTER
13: XML Rules
XML Rules Examples     211
tell myXMLElement
set myString to contents of text 1
tell parent
make XML attribute with properties {name:"part_number",
value:myString}
end tell
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end AddAttribute
In the previous XML rule, we copied the data from an XML element into an XML attribute attached to its 
parent XML element. Instead, what if we want to move the XML element data into an attribute and remove 
the XML element itself? Use the 
convertToAttribute
method, as shown in the following script (from the 
ConvertToAttribute tutorial script):
global myGlueCode
on run
tell application "Adobe InDesign CS5"
set myRootXML to first XML element of document 1
set myApplicationPath to file path
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
set myGlueCode to load script file myFilePath
set myRuleSet to {my ConvertToAttribute()}
end tell
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to ConvertToAttribute()
script ConvertToAttribute
property name : "ConvertToAttribute"
property xpath : "/devices/device/part_number"
on apply(myXMLElement, myRuleProcessor)
tell myGlueCode
__skipChildren(myRuleProcessor)
end tell
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
convert to attribute ("PartNumber")
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ConvertToAttribute
Pdf to tiff multipage - SDK application API:C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net, ASP.NET MVC, Ajax, WinForms, WPF
Online C# Tutorial for How to Convert PDF File to Tiff Image File
www.rasteredge.com
Pdf to tiff multipage - SDK application API:VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.net, ASP.NET MVC, Ajax, WinForms, WPF
Free VB.NET Guide to Render and Convert PDF Document to TIFF
www.rasteredge.com
C
HAPTER
13: XML Rules
XML Rules Examples     212
To move data from an XML attribute to an XML element, use the 
convertToElement
method, as described 
in Chapter12, “XML
.”
Applying multiple matching rules
When the 
apply
function of an XML rule returns true, the XML-rules processor does not apply any further 
XML rules to the matched XML element. When the 
apply
function returns false, however, the XML-rules 
processor can apply other rules to the XML element. The following script shows an example of an XML-rule 
apply
function that returns false. This script contains two rules that will match every XML element in the 
document. The only difference between them is that the first rule applies a color and returns false, while 
the second rule applies a different color to every other XML element (based on the state of a variable, 
myCounter
). For the complete script, see ReturningFalse.
global myGlueCode, myCounter
on run
set myCounter to 0
tell application "Adobe InDesign CS5"
set myRootXML to first XML element of document 1
set myApplicationPath to file path
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
set myGlueCode to load script file myFilePath
set myRuleSet to {my ReturnFalse(), my ReturnTrue()}
set myDocument to document 1
tell myDocument
set myColorA to make color with properties {name:"ColorA",
model:process, color value:{0, 100, 80, 0}}
set myColorB to make color with properties {name:"ColorB",
model:process, color value:{100, 0, 80, 0}}
end tell
end tell
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to ReturnTrue()
script ReturnTrue
property name : "ReturnTrue"
property xpath : "//*"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
if myCounter mod 2 = 0 then
set fill color of text 1 to "ColorA"
end if
set myCounter to myCounter + 1
end tell
on error myError
set myReturnString to myError
end try
end tell
--Do not process the element with any further matching rules.
return true
end apply
end script
SDK application API:C# TIFF: C#.NET Code to Split Multipage TIFF File
XDoc.Tiff ›› C# Tiff: Split Tiff. C# TIFF - Split Multi-page TIFF File in C#.NET. C# Guide for How to Use TIFF Processing DLL to Split Multi-page TIFF File.
www.rasteredge.com
SDK application API:.NET Multipage TIFF SDK| Process Multipage TIFF Files
to work with .NET development environments, this Multipage TIFF Processing SDK on the Web, open and view TIFF files on to SharePoint and save to PDF documents.
www.rasteredge.com
C
HAPTER
13: XML Rules
XML Rules Examples     213
end ReturnTrue
to ReturnFalse()
script ReturnFalse
property name : "ReturnFalse"
property xpath : "//*"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
set fill color of text 1 to "ColorB"
end tell
on error myError
set myReturnString to myError
end try
end tell
--Leave the XML element available for further matching rules.
return false
end apply
end script
end ReturnFalse
Finding XML elements
As noted earlier, the subset of XPath supported by XML rules does not allow for searching the text 
contents of XML elements. To get around this limitation, you can either use attributes to find the XML 
elements you want or search the text of the matching XML elements. The following script shows how to 
match XML elements using attributes. This script applies a color to the text of elements it finds, but a 
practical script would do more. For the complete script, see FindXMLElementByAttribute.
global myGlueCode
on run
tell application "Adobe InDesign CS5"
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
tell document 1
set myRootXML to first XML element
set myColorA to make color with properties 
{name:"ColorA", model:process, color value:{0, 100, 80, 0}}
end tell
end tell
set myGlueCode to load script file myFilePath
set myRuleSet to {my AddAttribute()}
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
set myRuleSet to {my FindAttribute()}
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to AddAttribute()
script AddAttribute
property name : "AddAttribute"
property xpath : "/devices/device/part_number"
--Adds the content of an XML element to an attribute of
SDK application API:Process Multipage TIFF Images in Web Image Viewer| Online
Export multi-page TIFF image to a PDF; More image viewing & displaying functions. Multipage TIFF Processing. This page provides detailed
www.rasteredge.com
SDK application API:C# TIFF: C# Code for Multi-page TIFF Processing Using RasterEdge .
instance, adding & deleting Tiff file page, merging and splitting Tiff files, and loading & saving Tiff file to commonly used file formats, like PDF, Bmp, Jpeg
www.rasteredge.com
C
HAPTER
13: XML Rules
XML Rules Examples     214
--the parent of the XML element. This can make finding the
--element by its contnet much easier and faster.
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
set myString to contents of text 1
tell parent
make XML attribute with properties 
{name:"part_number", value:myString}
end tell
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end AddAttribute
to FindAttribute()
script FindAttribute
property name : "FindAttribute"
property xpath : "/devices/device[@part_number = 'DS001']"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
set fill color of text 1 to "ColorA"
end tell
on error myError
set myReturnString to myError
end try
end tell
return false
end apply
end script
end FindAttribute
The following script shows how to use the 
findText
method to find and format XML content (for the 
complete script, see FindXMLElementByFindText):
SDK application API:Process Multipage TIFF Images in .NET Winforms | Online Tutorials
Swap a Page in a Multipage TIFF Image. Multi-page Tiff Processing; RasterEdge OCR Engine; PDF Reading; Encode & Decode JBIG 2 Files;
www.rasteredge.com
SDK application API:VB.NET Image: Multi-page TIFF Editor SDK; Process TIFF in VB.NET
VB.NET Imaging - Multi-page TIFF Processing in VB. VB.NET TIFF Editor SDK to Process Multi-page TIFF Document Image. Visual C#. VB.NET.
www.rasteredge.com
C
HAPTER
13: XML Rules
XML Rules Examples     215
global myGlueCode
on run
tell application "Adobe InDesign CS5"
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
tell document 1
set myRootXML to first XML element
set myColorA to make color with properties {name:"ColorA", 
model:process, color value:{0, 100, 80, 0}}
end tell
end tell
set myGlueCode to load script file myFilePath
set myRuleSet to {my FindByFindTExt()}
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to FindByFindTExt()
script FindByFindTExt
property name : "FindByFindText"
property xpath : "/devices/device/description"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
set find text preferences to nothing
set change text preferences to nothing
set find what of find text preferences to "triangle"
try
tell myXMLElement
set myFoundItems to find text
if (count myFoundItems) is greater than 0 then
set fill color of text 1 to "ColorA"
end if
end tell
on error myError
set myReturnString to myError
end try
set find text preferences to nothing
set change text preferences to nothing
end tell
return false
end apply
end script
end FindByFindTExt
The following script shows how to use the 
findGrep
method to find and format XML content (for the 
complete script, see FindXMLElementByFindGrep):
SDK application API:C# Raster - Image Save Options in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB.NET Tiff, VB.NET Imaging, VB.NET OCR, VB.NET Twain, VB.NET TIFF(Tiff). MultiPage:
www.rasteredge.com
SDK application API:C# PDF insert image Library: insert images into PDF in C#.net, ASP
Add multiple images to multipage PDF document in .NET WinForms. Jpeg or Jpg, Png, Gif, Bmp, Tiff and other Powerful .NET PDF image edit control, enable users to
www.rasteredge.com
C
HAPTER
13: XML Rules
XML Rules Examples     216
global myGlueCode
on run
tell application "Adobe InDesign CS5"
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
tell document 1
set myRootXML to first XML element
set myColorA to make color with properties {name:"ColorA", 
model:process, color value:{0, 100, 80, 0}}
end tell
end tell
set myGlueCode to load script file myFilePath
set myRuleSet to {my FindByFindGrep()}
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to FindByFindGrep()
script FindByFindGrep
property name : "FindByFindGrep"
property xpath : "/devices/device/description"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
set find grep preferences to nothing
set change grep preferences to nothing
--Find all of the devices the mention both "pulse" and
--"triangle" in their description.
set find what of find grep preferences to 
"(?i)pulse.*?triangle|triangle.*?pulse"
try
tell myXMLElement
set myFoundItems to find grep
if (count myFoundItems) is greater than 0 then
set fill color of text 1 to "ColorA"
end if
end tell
on error myError
set myReturnString to myError
end try
set find grep preferences to nothing
set change grep preferences to nothing
end tell
return false
end apply
end script
end FindByFindGrep
Extracting XML elements with XML rules
XSLT often is used to extract a specific subset of data from an XML file. You can accomplish the same thing 
using XML rules. The following sample script shows how to duplicate a set of sample XML elements and 
move them to another position in the XML element hierarchy. Note that you must add the duplicated XML 
elements at a point in the XML structure that will not be matched by the XML rule, or you run the risk of 
creating an endless loop. For the complete script, see ExtractSubset.
C
HAPTER
13: XML Rules
XML Rules Examples     217
global myGlueCode
on run
tell application "Adobe InDesign CS5"
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
tell document 1
set myRootXML to first XML element
set myXMLTag to make XML tag with properties {name:"VCOs"}
tell myRootXML
set myXMLElement to make XML element with properties 
{markup tag:myXMLTag}
end tell
end tell
end tell
set myGlueCode to load script file myFilePath
set myRuleSet to {my ExtractVCO()}
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to ExtractVCO()
script ExtractVCO
property name : "ExtractVCO"
property xpath : "/devices/device/type"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
if contents of text 1 of myXMLElement is "VCO" then
set myNewXMLElement to duplicate parent of myXMLElement
end if
move myNewXMLElement to end of XML element -1 of XML element 1 
of document 1
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ExtractVCO
Applying formatting with XML rules
The previous XML-rule examples have shown basic techniques for finding XML elements, rearranging the 
order of XML elements, and adding text to XML elements. Because XML rules are part of scripts, they can 
perform almost any action—from applying text formatting to creating entirely new page items, pages, 
and documents. The following XML-rule examples show how to apply formatting to XML elements using 
XML rules and how to create new page items based on XML-rule matching.
The following script adds static text and applies formatting to the example XML data (for the complete 
script, see XMLRulesApplyFormatting):
C
HAPTER
13: XML Rules
XML Rules Examples     218
global myGlueCode
on run
tell application "Adobe InDesign CS5"
set myApplicationPath to file path
set myFilePath to file path as string
set myFilePath to myFilePath & "Scripts:Xml rules:glue code.scpt"
tell document 1
tell view preferences
set horizontal measurement units to points
set vertical measurement units to points
set ruler origin to page origin
end tell
set myRootXML to first XML element
set myColor to make color with properties 
{model:process, color value:{0, 100, 100, 0}, name:"Red"}
make paragraph style with properties {name:"DeviceName", 
point size:24, leading:24, space before:24, fill color:"Red", 
rule above:true, rule above offset:24}
make paragraph style with properties {name:"DeviceType", 
point size:12, font style:"Bold", leading:12}
make paragraph style with properties {name:"PartNumber", 
point size:12, font style:"Bold", leading:12}
make paragraph style with properties {name:"Voltage", 
point size:10, leading:12}
make paragraph style with properties {name:"DevicePackage", 
pointSize:10, leading:12}
make paragraph style with properties {name:"Price", point size:10, 
leading:12, font style:"Bold", space after:12}
end tell
end tell
set myGlueCode to load script file myFilePath
set myRuleSet to {my ProcessDevice(), my ProcessName(), my ProcessType(), my 
ProcessPartNumber(), my ProcessSupplyVoltage(), my ProcessPackageType(), my 
ProcessPrice(), my ProcessPackageOne(), my ProcessPackages()}
tell myGlueCode
__processRuleSet(myRootXML, myRuleSet, {})
end tell
end run
to ProcessDevice()
script ProcessDevice
property name : "ProcessDevice"
property xpath : "/devices/device"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
insert text as content using return position after element
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ProcessDevice
to ProcessName()
script ProcessName
C
HAPTER
13: XML Rules
XML Rules Examples     219
property name : "ProcessName"
property xpath : "/devices/device/name"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
insert text as content using return position after element
apply paragraph style using "DeviceName"
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ProcessName
to ProcessType()
script ProcessType
property name : "ProcessType"
property xpath : "/devices/device/type"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
insert text as content using "Circuit Type: " position 
before element
insert text as content using return position after element
apply paragraph style using "DeviceType"
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ProcessType
to ProcessPartNumber()
script ProcessPartNumber
property name : "ProcessPartNumber"
property xpath : "/devices/device/part_number"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
insert text as content using "Part Number: " position before 
element
insert text as content using return position after element
apply paragraph style using "PartNumber"
end tell
on error myError
set myReturnString to myError
end try
C
HAPTER
13: XML Rules
XML Rules Examples     220
end tell
return true
end apply
end script
end ProcessPartNumber
to ProcessSupplyVoltage()
script ProcessSupplyVoltage
property name : "ProcessSupplyVoltage"
property xpath : "/devices/device/supply_voltage"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
insert text as content using "Supply Voltage: From: " 
position before element
tell XML element 1
insert text as content using " to " position after 
element
end tell
tell XML element -1
insert text as content using " volts" position after 
element
end tell
insert text as content using return position after element
apply paragraph style using "Voltage"
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ProcessSupplyVoltage
to ProcessPackageType()
script ProcessPackageType
property name : "ProcessPackageType"
property xpath : "/devices/device/package/type"
on apply(myXMLElement, myRuleProcessor)
global myReturnString
set myReturnString to "OK"
tell application "Adobe InDesign CS5"
try
tell myXMLElement
insert text as content using "-" position after element
end tell
on error myError
set myReturnString to myError
end try
end tell
return true
end apply
end script
end ProcessPackageType
--Add the text "Package:" before the list of packages.
to ProcessPackageOne()
script ProcessPackageOne
property name : "ProcessPackageOne"
Documents you may be interested
Documents you may be interested