2011-04-28 9 views
0

나는이 태그의 URL을 추출해야합니다Nokogiri로 XML에서 속성/옵션 값을 얻으려면 어떻게해야합니까?

<media:content url="http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4" fileSize="15533795" type="video/mp4" /> 

현재이 코드를 사용하지만 난 단지 전무 값을 얻을 : item.at_xpath('media:content')['url']를 사용해보십시오 :

page_content = Nokogiri::XML(open("http://www.ted.com/talks/rss")) 

page_content.xpath('//item').each {|item| 
    @url = course_hash[:videoUrl] = item.at_xpath('[media:content]')['url'] 
    puts @url 
} 
+0

검색하는 XML에 대한 URL 또는 'xmlns' 선언을 포함하여 작고 잘린 XML 예제가 있어야합니다. –

답변

0

나는 당신의 XPath 표현식이 엉망 생각 대신.

+1

첫 번째 [ 'url'] – Guillaume

+0

'item.at_xpath ('media : content') [ 'url']'는 item.xpath ('media : ('media : content'). first [ 'url']'. 'at_xpath (expression)'은'xpath (expression) .first'의 줄임말입니다. (http://nokogiri.org/Nokogiri/XML/Node.html#method-i-at_xpath) – William

1

액세스하려는 노드에 media 네임 스페이스가 있으므로 노드를 찾으려고 할 때이를 고려해야합니다.

doc.search('//media:content').each do |n| 
    puts n['url'] 
end 
# >> http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4 

노코 기리 : 그것이 <xml> 태그에 정의되어있는 경우

require 'nokogiri' 

xml = %q{ 
<xml xmlns:media="http://xml.my.org/file"> 
<media:content url="http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4" fileSize="15533795" type="video/mp4" /> 
</xml> 
} 

doc = Nokogiri::XML(xml) 
doc.search('//media:content', 'media' => 'http://xml.my.org/file').each do |n| 
    puts n['url'] 
end 
# >> http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4 

노코 기리가 자동으로 우리가 간단한 양식을 사용할 수 있습니다 의미 네임 스페이스를 등록합니다 :

일반적으로 우리가 뭔가를 할 것 또한 이름 공간이있는 CSS 접근 자 사용을 지원합니다.

doc.search('media|content').each do |n| 
    puts n['url'] 
end 
# >> http://video.ted.com/talk/podcast/2011/None/MikeMatas_2011.mp4 
관련 문제