使用javascript`document.getElementsByTagName`解析xml(xforms)文档无法在phonegap android中运行

时间:2012-05-31 14:01:39

标签: javascript android jquery xml cordova

我在使用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。 TY。

1 个答案:

答案 0 :(得分:0)

这个问题已经连续两周没有答复了,所以我只是张贴了我的所作所为。

现在我只是手动引用元素的确切位置,比如到达xml.firstChild.children [1]的身体。

所以我所做的就是不搜索带有命名空间的标签,只是直接引用它们。