парсинг xml с appleScript или, возможно, shell - PullRequest
0 голосов
/ 27 августа 2010

Мне нужно разобрать xml для проекта applecript, и я получил старт, но по какой-то причине мой код работает не так, как я ожидал, он находит искомый элемент, но не возвращает значение

вот код

 set xmlFile to ((choose file without invisibles) as string)
 tell application "System Events"
    set xdata to XML element 1 of contents of XML file xmlFile
    set foo to my getxml(xdata, "line1")
    return foo
 end tell

 on getxml(xmldata, e)
    tell application "System Events"
        repeat with i from 1 to count of XML elements of xmldata
            set e_name to (get name of XML element i of xmldata) as Unicode text
            log e_name
            if e_name is equal to e then
                display dialog "hello"
                return value of XML element i of xmldata
            else
                my getxml(XML element i of xmldata, e)
            end if
        end repeat
    end tell
 end getxml

вот код xml

 <?xml version="1.0" encoding="UTF-8"?>
 <foo>
    <bar>
        <line1>test</line1>
    </bar>
    <crap>ohh</crap>
 </foo>

что интересно, если я дам ему предмет верхнего уровня, как он делает то, что я ожидаю

поэтому я просто хочу исправить этот код или сделать что-то лучше, может быть, что-то из оболочки, которую я могу вызвать для анализа моего xml?

спасибо

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Когда вы проходите через узлы XML, вы не возвращаете значение обратно через возврат от getxml ().

Предложите что-то вроде замены строки в getxml ():

my getxml(XML element i of xmldata, e)

с:

set foo to my getxml(XML element i of xmldata, e)
return foo

работал для меня.

1 голос
/ 07 октября 2010

В оболочке вы можете попробовать xmlstarlet http://xmlstar.sourceforge.net/ или даже лучше использовать nokogiri в Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...