我在用 javascript 解析 xform xml 时遇到了一些问题。
xml根目录的结构是:
<?xml version="1.0"?>
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:ex="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jr="http://openrosa.org/javarosa">
<h:head>
<h:title>Phonegap Survey</h:title>
</h:head>
<h:body>A ton more tags here</h:body>
</h:html>
我正在使用 firefox (v.12) 开发并尝试部署到 android 上的 phonegap/cordova。我正在使用 jquery ajax 从 odk 服务器获取数据。我正在指定dataType: 'xml'
,它正在按预期响应文档对象。在 Firefox 中,我编写了一个应用程序,将来自该 xml 的数据呈现给用户。我正在使用内置的 javascript DOM 函数,例如:
var title = surveyXML.getElementsByTagName('h:title')[0].firstChild.data
var body = surveyXML.getElementsByTagName('h:body')[0];
var text = surveyXML.getElementsByTagName('text')
我已经使用这些方法编写了完整的应用程序(并且运行良好)。但是现在我已经将我的文件复制到了 eclipse 上的 phonegap(在 android 模拟器 2.3 上运行 cordovo 1.7.0),没有一个 DOM 调用返回元素!我得到类似的东西:
05-31 13:21:28.686: D/CordovaLog(841): file:///android_asset/www/formcontroller.js:
line 159 : TypeError: Result of expression 'body' [undefined] is not an object.
对于所有的电话。我已验证设备具有正确的 xml(它不是空的或任何东西)
因此,为了完成这项工作,我尝试使用 jQuery 来导航文档对象,希望它知道我不知道的东西。使用如下调用:
$(surveyXML).find('title');
$(surveyXML).find('h:title')
根本不工作。但是没有前缀的标签h:
可以正常工作,如果我要搜索$(surveyXML).find('text')
它会按预期返回所有text
元素。
看到根元素是<html>
我尝试指定的dataType: html
(即使文档明确标记为,也只是尝试一下<?xml version="1.0"?>
)并且 jquery 无法解析它,正如预期的那样。
所以我想知道:如何解析这个 XML 跨平台,以便它可以在浏览器和 phonegap 中工作。而且,假设它不能同时使用相同的 DOM 操作函数,我怎样才能至少让它在 phonegap 中工作?
一如既往地感谢任何帮助。谢谢你。
编辑:现在我只是手动引用元素的确切位置,比如我要去的身体xml.firstChild.children[1]
。因为我是最后期限。我觉得应该还是有办法使用 getElementsByTagName 。泰。