Jquery不正确的子编号XML解析器

时间:2013-02-21 15:01:44

标签: javascript jquery

最近,我在使用Jquery在JavaScript中编写一个小型XML解析器时遇到了问题。我用来完成这项任务的代码如下:

     /*Private */
 var XMLObject=$.parseXML(dataXml);
 var $XMLObject=$(XMLObject); 

 var questionNumber=0;
 // array of XML objects 
 var questionsXML= new Array();

 /** Html questions */ 
 //array of strings
 var questionsHTML= new Array();
 /*********************
  * Constructor       *
  *********************/

 a=$XMLObject.find("questions"); 
 a.children().each( function () {
     console.log( "XML : " +  new XMLSerializer().serializeToString(this));
     questionsXML[questionNumber]=this;
     questionNumber++; 
 });


this.getXML=function () {
    var out = new XMLSerializer().serializeToString(this.XMLObject);
    return out;
}

this.getQuestionNumber=function() { 
    return questionNumber; 
}

// This function returns the question sequentially. 
this.getQuestion=function() { 
}

Test function  :

    function testXML () { 
        var xml ="XML see later"
        var Obj= new XMLQuestions(xml); 
        console.log("Question Number: " + Obj.getQuestionNumber());
    }

我不明白为什么返回的子数为3时应该是2.正如Jquery文档中所述,子函数应该只检查XML树的第一级。

用作Test的XML是以下内容:

<questionnaire>
  <questions>
      <question id="1">
          <number></number>
          <title>Q1</title>
          <answers >
              <answer type="TextInput">
                  <result>ss</result>
                  <questions>
          <title>Hidden</title>
         </questions>
              </answer>
          </answers>
      </question>
    <question id="2">
    <title>Q2</title>
    </question>
  </questions>
</questionnaire>

你可以看到问题的孩子数是两个。

我得到的结果是:

XML : <question id="1">           <number/>           <title>Q1</title>           <answers>               <answer type="TextInput">                   <result>ss</result>                     <questions>                     <title>Hidden</title>                   </questions>                </answer>           </answers>          </question> question.js:24
XML : <question id="2">         <title>Q2</title>       </question> question.js:24
XML : <title>Hidden</title> question.js:24
Question Number: 3 
你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

如果没有这样的属性,不调用this.XMLObject会导致错误吗?您定义的var XMLObjectthis.XMLObject;

不同

当实际变量不是属性时调用this.$XMLObject也会引发异常。

另一件事:尝试使用questionsXML.push(this)而不是增加变量questionNumber。要使用return questionsXML.length返回计数。

除此之外,我认为您的代码应该返回正确的值。或者可能还有更多children(内部节点/值)。

要测试的XML:

<questionnaire>
    <questions>
        <question id="1">
            <number></number>
            <title>Q1</title>
            <answers>
                <answer type="TextInput">
                <result>ss</result>
            </answers>
        </question>
        <question id="2">
            <number></number>
            <title>Q1</title>
            <answers>
                <answer type="TextInput">
                <result>sSSs</result>
            </answers>
        </question>
    </questions>
</questionnaire>