2013-02-21 32 views
0

最近我遇到了使用Jquery在JavaScript中編寫小型XML解析器的問題。這我使用完成這項任務的代碼如下:Jquery不正確的孩子數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樹的第一級。

用作測試的XML是follwing一個:

<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 

你能幫助我嗎?

+0

你正在寫自己的解析器,任何具體的原因是什麼?有這麼多解析器已經可用。 – 2018-01-23 04:27:45

回答

0

不叫this.XMLObject在沒有這種屬性的情況下會導致錯誤?你正在定義var XMLObject,它與this.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> 
+0

我把錯誤的代碼....我會更新 – 2013-02-21 15:33:12

+0

正確的數字不是3,而是2 – 2013-02-21 15:33:35

+0

如果這是你使用的實際XML,它應該根本不工作...標記是有點搞砸向上。你可以試試我的結果嗎? – Martin 2013-02-21 15:43:20