0

最近我在使用 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());
    }

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

用作测试的 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 

你能帮助我吗?

4

1 回答 1

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>
于 2013-02-21T15:09:57.000 回答