我需要为一个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吗?
感谢
答案 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。