使用applescript或shell解析xml

时间:2010-08-26 23:16:48

标签: xml shell recursion applescript

我需要为一个AppleScript项目解析xml并且我有一个开始但是由于某种原因我的代码没有按照我预期的方式运行它确实找到了我正在寻找的项目但是没有返回值

这是代码

 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的shell吗?

感谢

2 个答案:

答案 0 :(得分:3)

当你通过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 :(得分:1)

在shell中你可以试试xmlstarlet http://xmlstar.sourceforge.net/,或者更好地在Ruby中使用nokogiri。