2011-08-26 2 views
2

Je ne trouve pas de déclaration officielle de la version xpath que Nokogiri supporte. Quelqu'un peut-il m'aider avec? En fait, je veux extraire des éléments qui ont un attribut start avec une sous-chaîne spécifiée. Par exemple, je souhaite que tous les éléments Book ayant un attribut category commencent par le caractère C. Comment faire cela avec nokogiri?Quelle version de xpath que Nokogiri prend en charge?

<?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

[ "Nokogiri ne supporte que XPath 1.0 et ne supporte pas XPath 2.0, qui tokenize() était d'abord défini en. "] (https://github.com/sparklemotion/nokogiri/issues/957). Les limitations sont dues à libxml2 et javax.xml.xpath – jtzero

Répondre

2

Je ne connais pas la version spécifique de XPath Nokogiri. Mais, vous pouvez le faire:

Je veux obtenir tous book éléments qui ont un attribut category commencer par le caractère C.

à l'aide de XPath starts-with:

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

Vous pouvez également utiliser un CSS3 "begins with" selector:

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