2011-08-26 6 views
2

Nokogiri가 지원하는 xpath 버전에 대한 공식 성명서를 찾을 수 없습니다. 누구든지 그걸 도와 줄 수 있니? 사실 지정된 하위 문자열로 시작하는 속성을 가진 일부 요소를 추출하려고합니다. 예를 들어 category 속성이있는 모든 Book 요소의 문자가 C 인 문자로 시작하려고합니다. 어떻게 노코 기리 (nokogiri)로 이것을 할 수 있습니까?Nokogiri가 지원하는 xpath의 버전은 무엇입니까?

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy?--> 
<bookstore> 

<book category="COOKING"> 
    <title lang="en">Everyday Italian</title> 
    <author>Giada De Laurentiis</author> 
    <year>2005</year> 
    <price>30.00</price> 
</book> 

<book category="CHILDREN"> 
    <title lang="en">Harry Potter</title> 
    <author>J K. Rowling</author> 
    <year>2005</year> 
    <price>29.99</price> 
</book> 

<book category="WEB"> 
    <title lang="en">XQuery Kick Start</title> 
    <author>James McGovern</author> 
    <author>Per Bothner</author> 
    <author>Kurt Cagle</author> 
    <author>James Linn</author> 
    <author>Vaidyanathan Nagarajan</author> 
    <year>2003</year> 
    <price>49.99</price> 
</book> 

<book category="WEB"> 
    <title lang="en">Learning XML</title> 
    <author>Erik T. Ray</author> 
    <year>2003</year> 
    <price>39.95</price> 
</book> 

</bookstore> 
+0

[ "노코 기리 만의 XPath 1.0 지원 및 XPath는 2.0, 토큰 화를 지원하지 않습니다()이었다 처음에 정의되었습니다. "] (https://github.com/sparklemotion/nokogiri/issues/957). 제한 사항은 libxml2 및 javax.xml.xpath로 인해 발생합니다. – jtzero

답변

2

어떤 특정 버전의 XPath Nokogiri가 지원되는지 알 수 없습니다. 그러나, 당신은이 작업을 수행 할 수 있습니다

내가 문자 C로 시작하는 속성 category있는 모든 book 요소를 싶어.

doc = Nokogiri::XML(your_xml) 
doc.search('//book[starts-with(@category, "C")]').each { |e| puts e['category'] } 
# output is: 
# COOKING 
# CHILDREN 

당신은 또한 CSS3 "begins with" selector 사용할 수 있습니다 : XPath에의 starts-with 사용

doc = Nokogiri::XML(your_xml) 
doc.search('book[category^=C]').each { |e| puts e['category'] } 
# output is: 
# COOKING 
# CHILDREN 
관련 문제