문제

나는 만들고있다 야후! 위젯 문제 없이이 작업을 수행했습니다 (위젯 생성). 나는 받고있다 XML 문서 Weblink를 통해 모든 노드가 트리를 소개하고 싶다. 나는 이것을하고있다 :

var request = new XMLHttpRequest();
        request.open( "GET", url, false );
        request.send();
        if ( request.status == 200 )
        {
            doc = request.responseXML;
            tree = doc.evaluate("/lfm");
            status = tree.item(0).getAttribute("status")
            if(status == "ok")
            {
                print ("status is ok!");
                tracks = doc.evaluate("/lfm/recenttracks[1]/track");
                for(i=0;i<tracks.length;i++)
                {
                    artist = tracks.item(i).firstChild.firstChild.data;
                }
            }
        }
    }

이렇게하면 노드를 얻을 수 있습니다 아티스트 밖으로 나무. 당신이 가고 싶다면 문제가 있습니다. 다음 형제. 당신은 전화해야합니다

tracks.item(i).firstChild.nextSibling.firstChild.data;
tracks.item(i).firstChild.nextSibling.nextSibling.firstChild.data;
tracks.item(i).firstChild.nextSibling.nextSibling.nextSibling.firstChild.data;

이것을 끝내기 위해. 그 옆에 노드가 추가됩니다 '넥타이 블링' 그것과 같은. 이 노드를 계속 추가하고 싶지 않으며 사용할 수 있다고 생각했습니다. 어린이 [i 이와 같이:

artist = tracks.item(i).childNodes[0].firstChild.data;
nextitem = tracks.item(i).childNodes[1].firstChild.data;

그래도 이것은 작동하지 않습니다. 돌아옵니다 "Childnodes [0]에는 속성이 없습니다." 어떤 식 으로든 나는 그것을 사용합니다. 이제 나는 또한 방법이 있다고 생각합니다 xpath For-loop에서 이것을하기 위해 :

name = doc.evaluate("string(/lfm/recenttracks[1]/track["+i+"]/name)");
                    print(name);
othernode = doc.evaluate("string(/lfm/recenttracks[1]/track["+i+"]/album)");
                    print(othernode);

그리고 증가합니다 다음 트랙을 위해. 그러나 어떻게 든 이것은 단지 돌아옵니다 하나 안건. a에서 더 많은 항목을 검색하지 않습니다 ~을 위한-고리. I-1 작동하지 않습니다.

누구든지 내 I 값으로 xpath 표현식을 사용하여 노드를 선택한 다음 수퍼 노드 당 서브 노드를 가져 오는 방법을 알고 있습니까? 당 난 갖길 원해 아티스트, 이름, 스트림 가능, mbid, 앨범, URL, 이미지 (작은), 이미지 (중간), 이미지 (큰) 그리고 데이트.

내 XML 파일은 다음과 같습니다.

<lfm status="ok">
   <recenttracks user="xaddict">
      <track nowplaying="true"> 
         <artist mbid="f5b8ea5f-c269-45dd-9936-1fedf3c56851">The Presets</artist>
         <name>Girl (You Chew My Mind Up)</name>
         <streamable>1</streamable>
         <mbid></mbid>
         <album mbid="b150d099-b0f3-4feb-9a05-34e693c6dd24">Beams</album>
         <url>http://www.last.fm/music/The+Presets/_/Girl+%28You+Chew+My+Mind+Up%29</url>
         <image size="small">http://userserve-ak.last.fm/serve/34s/8696437.jpg</image>
         <image size="medium">http://userserve-ak.last.fm/serve/64s/8696437.jpg</image>
         <image size="large">http://userserve-ak.last.fm/serve/126/8696437.jpg</image>
         <date uts="1236440600">7 Mar 2009, 15:43</date>
      </track>
      <track > 
         <artist mbid="f5b8ea5f-c269-45dd-9936-1fedf3c56851">The Presets</artist>
         <name>Get Outta Here</name>
         <streamable>1</streamable>
         <mbid></mbid>
         <album mbid="0469956f-d895-4120-8ec5-29ad41b9e2fd">Blow Up</album>
         <url>http://www.last.fm/music/The+Presets/_/Get+Outta+Here</url>
         <image size="small">http://userserve-ak.last.fm/serve/34s/20923179.png</image>
         <image size="medium">http://userserve-ak.last.fm/serve/64s/20923179.png</image>
         <image size="large">http://userserve-ak.last.fm/serve/126/20923179.png</image>
         <date uts="1236440242">7 Mar 2009, 15:37</date>
      </track>
   </recenttracks>
</lfm>
도움이 되었습니까?

해결책 3

이 작업을 수행하는 완전히 XPath 지원 방법은 XPath의 문자열 변환을 사용하는 것입니다. Ive는 이미이 코드를 다른 질문에 대한 답으로 게시했으며 다시이를 수행 할 것입니다. 나는 이런 일을하는 방법에 대해 알게되어 매우 기쁩니다.

var entries = xmlDoc.evaluate("lfm/recenttracks/track");
var length = entries.length;
for(var i = 0; i &lt; length; i++) {
   var entry = entries.item(i);
   var obj = {
      artist: entry.evaluate("string(artist)"),
      name: entry.evaluate("string(name)"),
      url: entry.evaluate("string(url)"),
      image: entry.evaluate("string(image[@size='medium'])")
   };
posts[i] = obj;
}

다른 팁

이 시도

 for (var i = 0; i < xmlDoc.getElementsByTagName('track').length; i++)
            {
                alert(xmlDoc.getElementsByTagName('track')[i].getElementsByTagName('name')[0].childNodes[0].nodeValue); 
            }

XPath를 사용하려면 아래 솔루션을 사용해 볼 수도 있습니다.

var s = xmlDoc.evaluate( '//track' ,xmlDoc, null, XPathResult.ANY_TYPE, null );
var track = s.iterateNext();

while (track)
{
     alert(track.getElementsByTagName('name')[0].textContent );
     track = s.iterateNext();
}

관련 XML 조각을 게시 할 수 있습니까? 우리는 그것을 구문 분석하는 당신의 코드를보고 있지만 XML 자체가 있다면 XPath 쿼리를 고려하는 것이 더 쉬울 것입니다. 가장 유용한 것은 요소가있는 비트입니다.

<lfm>
    <recenttracks>
        <track>
            <album>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top