2013-01-21 3 views
-1

안녕하세요. 미리 감사드립니다.xml이 올바른 노드를 제공하지 않습니다.

나는 XML 데이터를로드하고 assoc 배열로 파싱하는 문제에 대해 며칠 동안 고생했다. 마지막으로 시작 HTML5 문서의 헤더에 XML 구성 데이터를 포함 시키기로 결정했습니다.

아래에는 전체 파일이 포함되어 있습니다. parseFromString() 통해 데이터를로드 할 때 일부 노드를 얻을하지만 일부 다른 함께 함께 구문 분석 오류가 나타나지도 나타나지 않습니다. 나는이 일을 며칠 동안 망쳤다. 나는 왜 파싱 오류가 나는지 알지 못한다.

<!-- I2TM Game Engine [Developer] --> 
<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
    <title>I2TM: Example Template</title> 
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> 
    <meta name="apple-mobile-web-app-capable" content="yes"/> 
    <link href="css/default.css" rel="stylesheet" type="text/css" /> 
    <script id="resources" type="text/xmldata"> 
    <resources name="Template" version="0.1" publisher="I2TM Software" copyright="2012-2013"> 
     <credits> 
      <credit id="0" name="Andrew Donelson" url="http://www.i2tmsoftware.com" desc="Author" /> 
      <credit id="1" name="Playcraft Labs" url="http://www.playcraftlabs.com" desc="I2TM Engine forked from PlaycraftJS v0.5.6" /> 
      <credit id="2" name="SoundManager2" url="http://www.schillmania.com/projects/soundmanager2/" desc="Used in I2TM Engine as primary Sound API" /> 
      <credit id="3" name="James Padolsey" url="https://github.com/padolsey/string/blob/master/string.js" desc="Used in I2TM Engine extended String API" /> 
      <credit id="4" name="Alexandru Marasteanu" url="http://www.diveintojavascript.com/projects/javascript-sprintf" desc="Used in I2TM Engine to add sprintf capability" /> 
     </credits> 
     <languages> 
      <language name="english" from="english" to="english" /> 
      <language name="spanish" from="english" to="spanish" /> 
      <language name="german" from="english" to="german" /> 
     </languages> 
     <sounds> 
      <sound name="i2tm" ogg="true" mp3="true" channels="1" file="sounds/i2tm" /> 
     </sounds> 
     <images> 
      <image name="publisher" file="images/publisher.png" /> 
      <image name="touchpad" file="images/touchpad_buttons.png" />     
      <image name="title" file="images/title.png" /> 
      <image name="starport" file="images/starport.png" />  
     </images> 
    </resources> 
    </script> 
    <!--[if lt IE 9]> 
     <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script> 
    <![endif]--> 
</head> 
<body> 
    <script type="text/javascript" src="../playcraftengine/playcraftjs/lib/playcraft.js"></script> 
    <!-- Engine creates game elements and restores upon friendly exit. --> 
    <div id="pcGameDiv"> 
     <div> 
     <!-- Development --> 
     <a class="caption" href="javascript:pc.start('js/', ['game.main.js','touch.main.js','game.resources.js','factory.entity.js','factory.sound.js','scene.publisher.js','scene.mainmenu.js','scene.touchpad.js','scene.game.js','system.touchpad.js'],'../playcraftengine/playcraftjs/lib/');">Play Now</a> 
     <!-- Production 
     <a class="caption" href="javascript:pc.start('js/', ['game.min.js']);">Play Now</a> 
     --> 
     </div> 
     <div><strong>Game Title</strong><p>replaces this text with the description of your game here</p></div> 
     <div><strong>Help</strong><p>Replace this with how to play or other helpful information</p></div> 
    </div> 
</body> 
</html> 

는 너희들이 줄 수있는 모든 도움을 주셔서 감사합니다 것

loadResources:function() 
    { 
     function xml_to_array(xml,tag) 
     { 
      var data = xml.getElementsByTagName(tag); 
      var res = {}; 
      if (data) 
      { 
       for (i=0;i<data.length;++i) 
       { 
        var root = data[i].nodeName; 
        res[root] = new Array(); 
        for (n=0;n<data[i].childNodes.length;++n) 
        { 
         if (data[i].childNodes[n].nodeName != "#text") 
         { 
          var node = data[i].childNodes[n].nodeName; 
          var attr = data[i].attributes; 
          for (a=0;a<attr.length;++a) 
          { 
           var field = attr[a].nodeName; 
           var value = attr[a].nodeValue;       
           res[root][node][field]=value; 
          } 
         } 
        }      
       } 
      } 
      return res; 
     } //end xml_to_array() 

     var xml = this.parseXML(document.getElementById('resources').innerHTML); 

        //look at the value of xml in your favorite debugger...that is the problem. 
        //nodes are missing, parse errors, ect. 

        //following code is work in progress and does not work completely until i get the XML data right. 
     this.resources = new Array(); 
     this.resources['game'] = xml_to_array(xml,'game'); 
     this.resources['credits'] = xml_to_array(xml,'credits');  
     this.resources['strings'] = xml_to_array(xml,'string'); 
     this.resources['sounds'] = xml_to_array(xml,'sound'); 
     this.resources['images'] = xml_to_array(xml,'image'); 
    }, 

    /** 
    * Parses XML and returns an XMLDoc 
    */ 
    parseXML:function (xml) 
    {   
     if (window.DOMParser) 
     { 
      // standard 
      if (!this.xmlParser) 
       this.xmlParser = new DOMParser(); 
      try { 
       return this.xmlParser.parseFromString(xml, "text/xml") 
      } catch(e) { 
       this.error('DOH! error loading '+xml+'.'); 
      } 
     } else // ie 
     { 
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.async=false; 
      return xmlDoc.loadXML(xml) 
     } 
    } //end parseXML() 
}); 

을 [코드를 획득하고 분석하는 데 사용되는]. 그렇게 정의 된 XML을 ... 개발자가 기본적으로 한 줄에 정의 된 각 리소스를 가지며 여러 키가있는 섹션 대신 특성을 사용하는 것이 더 빠르고 간단합니다. 이런 식으로 NAME 속성으로 제공하면 아무런 문제가 없어야합니다. 다른 속성은 시스템에 의해 무시되고 특정 용도로 사용됩니다!

+0

'playcraft.js'가 404 - 기록을 위해

이 문제 (xmlParseEntityRef 행 4 열 (37))에 직접 포인트 I 웹킷에 parseFromString에서 얻는 (직렬화) 출력 어쨌든 질문에는 외부 코드와의 링크가 아닌 자체적 인 예제가 포함되어야합니다. (질문에 XML을 포함하십시오.) –

+0

HTML 문서를 HTML이 아닌 코드로 표시 할 수 없기 때문에이 작업을 수행했습니다. 나는 pre, code pre & code를 시도했다. 그 필요가없는 플레이 크래프트에 관해서. 디플레이션 된 코드가 모두 사용됩니다. 그냥 name : function()에서 function name()으로 변경하십시오. 임은 왜 DOM에 읽은 후에 노드가 잘못되었는지에 대해 더 걱정합니다. – NlaakALD

+0

왼쪽으로 네 칸을 들여 쓰거나'{}'버튼을 사용하십시오. '? '버튼을 클릭하면 도구 모음에 많은 도움이됩니다. –

답변

0

귀하의 XML이 잘못하고 오류 메시지가 바로 문제를 지적해야합니다

desc="Author & Publisher" 

는 이스케이프 앰퍼샌드를 참조하십시오? Author &amp; Publisher이어야합니다.

<resources name="Template" version="0.1" publisher="I2TM Software" copyright="2012-2013"> 
    <parsererror xmlns="http://www.w3.org/1999/xhtml" style="display: block; white-space: pre; border: 2px solid #c77; padding: 0 1em 0 1em; margin: 1em; background-color: #fdd; color: black"> 
     <h3>This page contains the following errors:</h3> 
     <div style="font-family:monospace;font-size:12px">error on line 4 at column 37: xmlParseEntityRef: no name</div> 
     <h3>Below is a rendering of the page up to the first error.</h3> 
    </parsererror> 
    <credits></credits> 
</resources> 
+0

OMG! 나는 nOOb 버그로 하루를 낭비했다. 그것은 90 년대 초반의 표준 프로세스였습니다. 나는 너무 어리 석다. 고맙습니다. 모든 노드가 표시됩니다. – NlaakALD

+0

감사합니다. 완벽하게 작동합니다. 풀렸다. – NlaakALD

관련 문제