Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
An XML/HTML parser for Objective-C, inspired by Hpricot.
Branch: master

This branch is 65 commits behind topfunky:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
Classes
Hpple.xcodeproj
UnitTesting
.gitattributes
.gitignore
GTMDefines.h
GTMIPhoneUnitTestDelegate.h
GTMIPhoneUnitTestDelegate.m
GTMIPhoneUnitTestMain.m
GTMSenTestCase.h
GTMSenTestCase.m
Hpple_Prefix.pch
Info.plist
LICENSE.txt
MainWindow.xib
README.markdown
TFHpple.h
TFHpple.m
TFHppleElement.h
TFHppleElement.m
Test-Info.plist
XPathQuery.h
XPathQuery.m
main.m

README.markdown

DESCRIPTION

EXPERIMENTAL! Only a few hours old.

Hpple: A nice Objective-C wrapper on the XPathQuery library for parsing HTML.

Inspired by why the lucky stiff's Hpricot.

AUTHOR

Geoffrey Grosenbach, Topfunky Corporation and PeepCode Screencasts.

FEATURES

  • Easy searching by XPath (CSS selectors are planned)
  • Parses HTML (XML coming soon)
  • Easy access to tag content, name, and attributes.

INSTALLATION

  • Open your XCode project and the Hpple project.
  • Drag the "Hpple" directory to your project.
  • Add the libxml2.2.dylib framework to your project and search paths as described at Cocoa with Love

More documentation and short screencast coming soon...

USAGE

See TFHppleHTMLTest.m in the Hpple project for samples.

#import "TFHpple.h"

NSData  * data      = [NSData dataWithContentsOfFile:@"index.html"];

TFHpple * doc       = [[TFHpple alloc] initWithHTMLData:data];
NSArray * elements  = [doc search:@"//a[@class='sponsor']"];

TFHppleElement * element = [elements objectAtIndex:0];
[e content];              // Tag's innerHTML
[e tagName];              // "a"
[e attributes];           // NSDictionary of href, class, id, etc.
[e objectForKey:@"href"]; // Easy access to single attribute

TODO

  • Internal error catching and messages
  • CSS3 selectors in addition to XPath
Something went wrong with that request. Please try again.