我在使用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。
答案 0 :(得分:0)
这个问题已经连续两周没有答复了,所以我只是张贴了我的所作所为。
现在我只是手动引用元素的确切位置,比如到达xml.firstChild.children [1]的身体。
所以我所做的就是不搜索带有命名空间的标签,只是直接引用它们。