2017-02-18 15 views
0

は、私は、文字列内のすべてのプレイヤーIDを保存していますxml--解析用XMLエラー

var xml = evt.target.result; 
var xmlDoc = $.parseXML(xml), 
    xml = $(xmlDoc), 
    playerId = xml.find("player_id").text(), 
    ids = playerId.match(/.{1,2}/g); 

からとによって、配列にそれをスライスよりも、いくつかのID(プレイヤーID)を解析するXMLパーサを作りました2文字。

私が解析していますXMLはこれです -

<?xml version="1.0" encoding="UTF-8" ?> 
<player_info> 
    <general_info> 
     <team_name>Manchester United</team_name> 
    </general_info> 
    <player_segment> 
     <player_id>01</player_id> 
     <player_info>Ryan Giggs</player_info> 
    </player_segment> 
    <player_segment> 
     <player_id>02</player_id> 
     <player_info>Wayne Rooney</player_info> 
    </player_segment> 
    <player_segment> 
     <player_id>03</player_id> 
     <player_info>Zlatan Ibrahimovic</player_info> 
    </player_segment> 
    <player_segment> 
     <player_id>04</player_id> 
     <player_info>David de Gea</player_info> 
    </player_segment> 
</player_info> 

私のパーサは、このXMLのため正常に動作しているとのライブデモはhereです。異なるサイズ(2文字以上)の可能性があるので、問題が発生するプレーヤーID。例を以下に示します。

<?xml version="1.0" encoding="UTF-8" ?> 
<player_info> 
    <general_info> 
     <team_name>Manchester United</team_name> 
    </general_info> 
    <player_segment> 
     <player_id>012</player_id> 
     <player_info>Ryan Giggs</player_info> 
    </player_segment> 
    <player_segment> 
     <player_id>02</player_id> 
     <player_info>Wayne Rooney</player_info> 
    </player_segment> 
    <player_segment> 
     <player_id>0/3</player_id> 
     <player_info>Zlatan Ibrahimovic</player_info> 
    </player_segment> 
    <player_segment> 
     <player_id>04567</player_id> 
     <player_info>David de Gea</player_info> 
    </player_segment> 
</player_info> 

このような状況をどのように処理できますか?

+1

すでに 'xml.find( "player_id")を呼び出すことによって達成これではありません。テキスト()'? 'playerId'を出力したときの出力は? –

+0

2番目のxmlから適切なプレーヤーIDを取得する際に問題に直面しています。私はユニバーサル/ユニークなソリューションを探しています。これは、プレーヤーIDの長さを無責任に扱います。 – ni8mr

+0

[MDN:Regular Expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) – Andreas

答えて

1

このように動作するはずです。

ids = xml.find("player_id") すべてのノードは、ids[i].innerHTMLでそのコンテンツにアクセスできます.HTMLもXMLです。

function handleFileSelect(evt) { 
 
    var file = evt.target.files[0]; 
 
    if (file) { 
 
    var reader = new FileReader(); 
 
    reader.readAsText(file, "UTF-8"); 
 
    reader.onload = function(evt) { 
 
     var xml = evt.target.result; 
 
     var xmlDoc = $.parseXML(xml), 
 
     xml = $(xmlDoc), 
 
     ids = xml.find("player_id") 
 
     for (var i = 0; i < ids.length; i++) { 
 
     if (i == 0) { 
 
      $("#xml-data").empty().append($("<div>" + ids[i].innerHTML + "</div><br>")); 
 
     } else { 
 
      $("#xml-data").append($("<div>" + ids[i].innerHTML + "</div><br>")); 
 
     } 
 
     } 
 
    } 
 
    } 
 
} 
 

 
$("#file").change(handleFileSelect);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<title>XML file upload and parsing the title of the file</title> 
 
<h2>Upload xml ...</h2> 
 
<input type="file" id="file" accept=".xml" /> 
 
<div id="xml-data" style="color: red;"></div>