jQuery XML Parsing不使用嵌套标记

时间:2014-07-12 09:01:03

标签: javascript jquery xml cordova

我正在使用jQuery(cordova / phonegap中的应用程序)解析xml。为此,请关注this tutorial

一切正常,但涉及到嵌套标签。我有这个例子XML:

.....
<preguntas numero="2">
    <pregunta tipo="TF" id="xxx" resta="false">
        <enunciado>El cielo es azul?</enunciado>
        <respuesta1>SI</respuesta1>
        <respuesta2>NO</respuesta2>
        <retro-pos>Eso esta bien</retro-pos>
        <retro-neg>No esta bien</retro-neg>
    </pregunta>
    <pregunta tipo="DE" id="zzz" resta="false">
        <enunciado>Desarrolla por favor:</enunciado>
        <respuesta1>PUEDE</respuesta1>
        <retro-pos>Gracias por participar</retro-pos>
        <retro-neg>Gracias por participar una vez mas</retro-neg>
    </pregunta>
</preguntas>
....

正如您所看到的,我有两个嵌套的元素,它们可以有不同数量的标签。当我在我的js中尝试这个时:

....
x=xmlhttp.response;
xmlDoc = $.parseXML( x );
$(xmlDoc).find("preguntas").each(function()
{
    alert($(this).text()); // This shows contents of all "pregunta" correctly
    alert($(this).find("enunciado").text()); // This shows ALL "enunciado" as one single string
}
....

我怎样才能选择一个&#34; respuesta&#34;一次,所以我可以单独获取内容?

由于

1 个答案:

答案 0 :(得分:1)

假设你的意思是:

var x = '\n<preguntas numero="2">                                           '
+'\n    <pregunta tipo="TF" id="xxx" resta="false">                  '
+'\n        <enunciado>El cielo es azul?</enunciado>                 '
+'\n        <respuesta1>SI</respuesta1>                              '
+'\n        <respuesta2>NO</respuesta2>                              '
+'\n        <retro-pos>Eso esta bien</retro-pos>                     '
+'\n        <retro-neg>No esta bien</retro-neg>                      '
+'\n    </pregunta>                                                  '
+'\n    <pregunta tipo="DE" id="zzz" resta="false">                  '
+'\n        <enunciado>Desarrolla por favor:</enunciado>             '
+'\n        <respuesta1>PUEDE</respuesta1>                           '
+'\n        <retro-pos>Gracias por participar</retro-pos>            '
+'\n        <retro-neg>Gracias por participar una vez mas</retro-neg>'
+'\n    </pregunta>'
+'\n</preguntas>'
;

xmlDoc = $.parseXML( x );
$(xmlDoc).find("pregunta").each(function()
{
    console.log($(this).text()); // This shows contents of all "pregunta" correctly
    console.log($(this).find("enunciado").text()); // This shows ALL "enunciado" as one single string
})

注意find("pregunta")而不是find("preguntas")

另请注意,您需要在任何XML文档中包含单个根元素。所以,如果有其他preguntas个元素,则需要用一个元素包围它们。