2010-08-26 105 views
1

我正在使用SimpleXML来加载和分析PHP中的XML文档。使用CSS选择器而不是XPath查询SimpleXML对象

我对XPath并不太熟悉,我宁愿使用CSS选择器来解析它。我有什么选择?是否有任何预编译的SimpleXML,或者我应该使用不同的东西?

+0

[PHP CSS选择器库?]的可能重复(http://stackoverflow.com/questions/260605/php -css-selector-library)在那个线程中实际上有一些相当不错的信息... – ircmaxell 2010-08-26 14:00:28

+0

我认为这个问题应该留下来。这一个是特定于SimpleXML的。 – 2010-08-26 14:06:11

+0

是的,阅读它,但提到的唯一解决方案是符合法案的是“CssSelector \ Parser”,一个Symphony 2组件,链接到一个提到了破坏的Github链接的帖子。浏览Symphony的Github上的回购我可以在这里找到它:http://github.com/fabpot/symfony/tree/master/src/Symfony/Component/CssSelector/。不是一个重复的问题,因为它是用于XHTML,大多数答案都是关于DOM解析器的。 – Andrei 2010-08-26 14:10:15

回答

4

SimpleXML不支持CSS选择器,但我知道某些PHP和Javascript库可以将CSS选择器转换为XPath查询。 IIRC,有一个PHP库可以模仿jQuery的选择器,但我不记得它的名字。希望它能够启动别人的记忆。


原来我想着不支持CSS选择器的库,但好消息是Zend Framework有一个CSS到的XPath译者:

include 'Zend/Dom/Query/Css2Xpath.php'; 

$xpath = Zend_Dom_Query_Css2Xpath::transform('div.class span'); 

$mySimpleXMLElement->xpath($xpath); 
+0

谢谢!正是我在找的东西。很好用。 – Andrei 2010-08-26 14:49:29

2

在Zend CSS-到-XPath翻译器不是完整的证明。它没有索引选择器 - 类似tr:eq(1)将不会被转换为tr [2]

+0

@Andrei最近发现了这个JS函数,用于将css选择器转换为xpath - [james.padolsey.com/scripts/javascript/css2xpath.js](http://james。 padolsey.com/scripts/javascript/css2xpath.j S)。看起来相当不错,但必须移植到PHP.4 注意:css2xpath.js是[YQL](http://developer.yahoo.com/yql/console/?q=use%20'http%3A %2F%2Fyqlblog.net%2Fsamples%2Fdata.html.cssselect.xml'%20AS%20data.html.cssselect%3B%20select%20 *%20from%20data.html.cssselect%20where%20url%3D%22www.yahoo .com%22%20and%20css%3D%22%23news%20a%22)也用于解析css选择器。 – 2011-10-12 03:15:06