0

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

4

1 回答 1

0

这已经有 2 周没有答复了,所以我只是发布我所做的。

就目前而言,我只是手动引用元素的确切位置,例如我将使用 xml.firstChild.children[1]。

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

于 2012-06-14T15:48:29.410 回答