1. Welcome to the new MacRumors forums. See our announcement and read our FAQ

(AppleScript) "Tell"-ing every XML element to do something

Discussion in 'Mac Programming' started by moonman239, Jan 2, 2013.

  1. macrumors 65816

    #1
    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."
     
  2. macrumors 65816

    #2
    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.
     
  3. macrumors 65816

    #3
    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.
     

Share This Page