2013-08-27 1 views
0

자식 요소를 검색 할 때 부모 요소를 반환하고 병렬 자식의 텍스트를 표시하려고합니다.jQuery XML 구문 분석 - 자식의 부모 요소를 반환하십시오.

XML :

<store> 
    <shelf> 
     <book> 
      <name>Book_1</name> 
      <id>1</id> 
     </book> 
     <book> 
      <name>Book_2</name> 
      <id>2</id> 
     </book> 
     <book> 
      <name>Book_1</name> 
      <id>3</id> 
     </book> 
    </shelf> 
</store> 

jQuery를 :

$(document).ready(function(){ 
    $.ajax({ 
     type: "GET", 
     url: "xml_file.xml", 
     dataType: "xml", 
     success: parseXml 
    }); 
}); 

function parseXml(xml){ 

    var books = $(xml).find('name').filter(function() { 
     return $(this).text() === 'Book_1'; 
    }).parent(); 

    for(i=0; i<books.length; i++){ 
     $('#results').text(
      (books[i]).find('id').text() 
     ); 
    } 
} 

HTML :

<div id="results"></div> 

그러니까 기본적으로, 나는 그와 함께 "이름"을 검색하면 텍스트 "책"을 가지고, 나는 2 권의 책을 돌려 받고 싶다. id = "results"인 div에 각 책을 표시하고 싶습니다. 어떤 도움을 주시면 감사하겠습니다. 감사!

+0

답을 알려줘 ... –

답변

0

으로 XML이 유효하지 않습니다, 당신은 루트 노드를 놓치고, 당신은 praseXml에서 $을 놓치고 </id> 또한

<shelf> 
    <book> 
     <name>Book_1</name> 
     <id>1</id> 
    </book> 
    <book> 
     <name>Book_2</name> 
     <id>2</id> 
    </book> 
    <book> 
     <name>Book_1</name> 
     <id>3</id> 
    </book> 
</shelf> 

처럼 </aid>은해야하고는 .text는 이전의 모든 값을 기록 이상합니다 사용

function parseXml(xml){ 

    var books = $(xml).find('name').filter(function() { 
     return $(this).text() === 'Book_1'; 
    }).parent(); 

    for(i=0; i<books.length; i++){ 
     $('#results').append(
      $(books[i]).find('id').text() 
     ); 
    } 
} 

http://jsfiddle.net/uq9cW/

+0

나는 원래 문제의 예를 들어 XML을 업데이트했습니다. 감사합니다. –

0

brev에 대한 로컬 변수로 XML 설정 ity.

var $xml = $("<books><book><name>Book_1</name><id>1</aid></book><book><name>Book_2</name><id>2</aid></book><book> <name>Book_1</name><id>3</aid></book></books>") 

var searchString = "Book_1"; 
var matchedBooks = $xml 
    .children('book') /* Get all the books */ 
    .children('name') /* And then the names. You could just get the names first, but this will allow you to exclude nodes not inside of a book element */ 
    .filter(function(i,v){ return $(v).text() == searchString; }) /* This excludes non matching names. */ 
    .parent('book'); /* Now we have 2 matching elements, on each, get the parent element */ 

/* Build the html then append to save DOM interaction speed tax */ 
var resultHtml = ""; 
$(matchedBooks).each(function(i, e){ 
    resultHtml += "<p>" + $(e).find('id').text() + "</p>"; 
}); 
$("#results").html(resultHtml); 

가 당신이 어떤 곳 XML을 호스팅하거나 사용하는 샘플 XML의 URL을 줄 수 귀하의 질문에