Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

moonman239

Cancelled
Original poster
Mar 27, 2009
1,541
32
I have multiple elements in an XML file. I need to "tell" each of them to do something.

Here's the code:
Code:
on tellEveryXMLElementWithName(elementContainer, elementName, codetorun)
	try
		tell application "System Events"
			set elements to XML elements of elementContainer
			repeat with I from 1 to count of elements
				set e_name to (get name of XML element I of elementContainer) as string
				if e_name is equal to elementName then
					log "The script got this far."
					run script codetorun
				end if
			end repeat
		end tell
		return "success"
	on error errMsg
		return errMsg
	end try
end tellEveryXMLElementWithName

set the_file to (choose file without invisibles) as string
tell application "System Events"
	set file1 to XML file the_file
	tell file1
		set thecode to "display dialog the /'hi'/"
		set successful to my tellEveryXMLElementWithName(file1, "tableViewCell", thecode)
	end tell
end tell

The dialog box never displays. I can set X to 0 and thecode to "set X to 5" and the value of X will remain 0.

You may be thinking, "Here's your answer. Switch to a different programming language." My response to that is "I don't want to."
 

moonman239

Cancelled
Original poster
Mar 27, 2009
1,541
32
I think I figured out the problem. System Events is looking in the first level. If the element is not in the first level, then as far as System Events is concerned, the element doesn't exist. Therefore, I need to look in a specific level.
 

moonman239

Cancelled
Original poster
Mar 27, 2009
1,541
32
OK, I have a new set of code:

Code:
on tellEveryXMLElementWithName(elementContainer, elementName, codetorun)
	try
		set allElements to {}
		tell application "System Events"
			set elements to every XML element of elementContainer
			set elementCount to count of elements
			repeat with I from 1 to elementCount
				set theElement to XML element I of elementContainer
				set e_name to (get name of theElement) as string
				if e_name is equal to elementName then
					set occurrences to occurrences + 1
					log "The script got this far."
					tell theElement
						run script codetorun
					end tell
				end if
			end repeat
		end tell
		return "success"
	on error errMsg
		return errMsg
	end try
end tellEveryXMLElementWithName

set the_file to (choose file without invisibles) as string
tell application "System Events"
	set file1 to XML file the_file
	tell file1
		my tellEveryXMLElementWithName(file1, "tableViewCell", "display dialog hi")
	end tell
end tell

I just need to make some changes to this code so that it searches everywhere for elements with a given name.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.