Skip to content
A CSS Selector to XPath Selector converter for Objective-C.
Branch: devel
Clone or download
Pull request Compare This branch is 1 commit ahead of siuying:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
CSSSelectorConverter.xcodeproj
CSSSelectorConverter.xcworkspace
CSSSelectorConverter
CSSSelectorConverterTests
bin
.gitignore
.travis.yml
CHANGELOG.md
CSSSelectorConverter.podspec
LICENSE.txt
Podfile
Podfile.lock
README.md
Rakefile

README.md

CSS Selector Converter

A CSS Selector to XPath Selector for Objective-C. Support mostly used subset of CSS Selector Level 3.

I build this converter so that I can use .class instead of //*[contains(concat(' ', normalize-space(@class), ' '), ' class ')] in IGHTMLQuery.

Usage

#import "CSSSelectorConverter.h"

CSSSelectorToXPathConverter* converter = [[CSSSelectorToXPathConverter alloc] init];
[converter xpathWithCSS:@"p" error:nil];
// => "//p"

[converter xpathWithCSS:@"p.intro" error:nil];
// => "//p[contains(concat(' ', normalize-space(@class), ' '), ' intro ')]"

Status

It supports following CSS Selectors:

*                                "//*"
p                                "//p"
p.intro                          "//p[contains(concat(' ', normalize-space(@class), ' '), ' intro ')]"
p#apple                          "//p[@id = 'apple']"
p *                              "//p//*"
p > *                            "//p/*"
H1 + P                           "//H1/following-sibling::*[1]/self::P"
H1 ~ P                           "//H1/following-sibling::P"
ul, ol                           "//ul | //ol"
p[align]                         "//p[@align]"
p[class~="intro"]                "//p[contains(concat(\" \", @class, \" \"),concat(\" \", 'intro', \" \"))]"
div[att|="val"]                  "//div[@att = \"val\" or starts-with(@att, concat(\"val\", '-'))]"

It supports following pseduo classes:

  • first-child
  • last-child
  • first-of-type
  • last-of-type
  • only-child
  • only-of-type
  • empty

Currently pseduo classes with parameters are not supported (I probably will not implement them until I really NEEDS them):

  • nth-child()
  • nth-last-child()
  • nth-of-type()
  • nth-last-of-type()
  • not()

Following pseduo classes will not be supported:

  • Dynamic pseudo classes (:link, :visied, :hover ... etc)
  • UI elements states pseudo-classes (:enabled, :checked, :indeterminate)
  • :target
  • :lang
  • :root

Development

Building the project

  1. Install cocoapods
  2. Install pods: pod install

License

MIT License. See License.txt.

You can’t perform that action at this time.