-
Notifications
You must be signed in to change notification settings - Fork 61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix for :empty #20
Fix for :empty #20
Conversation
Whitespace is *not* empty.
So, the bug is that the previous code matched an element containing only white-space, but shouldn’t. Is that correct? Regarding CDATA, an interesting test case would be |
Oh, sorry that was a typo on my end (I meant to add wrapping elements...). The following will not match <s><![CDATA[abcdef]]></s> The selectors spec says the following:
This suggests to me that anything that matches a non-element that has a zero |
Have :empty not match whitespace-only elements.
Merged, thanks. |
Version 0.9.1 ------------- Released on 2013-10-17. * **Backward incompatible change from 0.9**: :meth:`~GenericTranslator.selector_to_xpath` defaults to ignoring pseudo-elements, as it did in 0.8 and previous versions. (:meth:`~GenericTranslator.css_to_xpath` doesn’t change.) * Drop official support for Python 2.4 and 3.1, as testing was becoming difficult. Nothing will break overnight, but future releases may on may not work on these versions. Older releases will remain available on PyPI. Version 0.9 ----------- Released on 2013-10-11. Add parser support for :attr:`functional pseudo-elements <Selector.pseudo_element>`. *Update:* This version accidentally introduced a **backward incompatible** change: :meth:`~GenericTranslator.selector_to_xpath` defaults to rejecting pseudo-elements instead of ignoring them. Version 0.8 ----------- Released on 2013-03-15. Improvements: * `#22 <https://github.com/SimonSapin/cssselect/issues/22>`_ Let extended translators override what XPathExpr class is used * `#19 <https://github.com/SimonSapin/cssselect/issues/19>`_ Use the built-in ``lang()`` XPath function for implementing the ``:lang()`` pseudo-class with XML documents. This is probably faster than ``ancestor-or-self::``. Bug fixes: * `#14 <https://github.com/SimonSapin/cssselect/issues/14>`_ Fix non-ASCII pseudo-classes. (Invalid selector instead of crash.) * `#20 <https://github.com/SimonSapin/cssselect/issues/20>`_ As per the spec, elements containing only whitespace are not considered empty for the ``:empty`` pseudo-class. Version 0.7.1 ------------- Released on 2012-06-14. Code name *remember-to-test-with-tox*. 0.7 broke the parser in Python 2.4 and 2.5; the tests in 2.x. Now all is well again. Also, pseudo-elements are now correctly made lower-case. (They are supposed to be case-insensitive.)
Version 0.9.1 ------------- Released on 2013-10-17. * **Backward incompatible change from 0.9**: :meth:`~GenericTranslator.selector_to_xpath` defaults to ignoring pseudo-elements, as it did in 0.8 and previous versions. (:meth:`~GenericTranslator.css_to_xpath` doesn’t change.) * Drop official support for Python 2.4 and 3.1, as testing was becoming difficult. Nothing will break overnight, but future releases may on may not work on these versions. Older releases will remain available on PyPI. Version 0.9 ----------- Released on 2013-10-11. Add parser support for :attr:`functional pseudo-elements <Selector.pseudo_element>`. *Update:* This version accidentally introduced a **backward incompatible** change: :meth:`~GenericTranslator.selector_to_xpath` defaults to rejecting pseudo-elements instead of ignoring them. Version 0.8 ----------- Released on 2013-03-15. Improvements: * `#22 <https://github.com/SimonSapin/cssselect/issues/22>`_ Let extended translators override what XPathExpr class is used * `#19 <https://github.com/SimonSapin/cssselect/issues/19>`_ Use the built-in ``lang()`` XPath function for implementing the ``:lang()`` pseudo-class with XML documents. This is probably faster than ``ancestor-or-self::``. Bug fixes: * `#14 <https://github.com/SimonSapin/cssselect/issues/14>`_ Fix non-ASCII pseudo-classes. (Invalid selector instead of crash.) * `#20 <https://github.com/SimonSapin/cssselect/issues/20>`_ As per the spec, elements containing only whitespace are not considered empty for the ``:empty`` pseudo-class. Version 0.7.1 ------------- Released on 2012-06-14. Code name *remember-to-test-with-tox*. 0.7 broke the parser in Python 2.4 and 2.5; the tests in 2.x. Now all is well again. Also, pseudo-elements are now correctly made lower-case. (They are supposed to be case-insensitive.)
Version 0.9.1 ------------- Released on 2013-10-17. * **Backward incompatible change from 0.9**: :meth:`~GenericTranslator.selector_to_xpath` defaults to ignoring pseudo-elements, as it did in 0.8 and previous versions. (:meth:`~GenericTranslator.css_to_xpath` doesn’t change.) * Drop official support for Python 2.4 and 3.1, as testing was becoming difficult. Nothing will break overnight, but future releases may on may not work on these versions. Older releases will remain available on PyPI. Version 0.9 ----------- Released on 2013-10-11. Add parser support for :attr:`functional pseudo-elements <Selector.pseudo_element>`. *Update:* This version accidentally introduced a **backward incompatible** change: :meth:`~GenericTranslator.selector_to_xpath` defaults to rejecting pseudo-elements instead of ignoring them. Version 0.8 ----------- Released on 2013-03-15. Improvements: * `#22 <https://github.com/SimonSapin/cssselect/issues/22>`_ Let extended translators override what XPathExpr class is used * `#19 <https://github.com/SimonSapin/cssselect/issues/19>`_ Use the built-in ``lang()`` XPath function for implementing the ``:lang()`` pseudo-class with XML documents. This is probably faster than ``ancestor-or-self::``. Bug fixes: * `#14 <https://github.com/SimonSapin/cssselect/issues/14>`_ Fix non-ASCII pseudo-classes. (Invalid selector instead of crash.) * `#20 <https://github.com/SimonSapin/cssselect/issues/20>`_ As per the spec, elements containing only whitespace are not considered empty for the ``:empty`` pseudo-class. Version 0.7.1 ------------- Released on 2012-06-14. Code name *remember-to-test-with-tox*. 0.7 broke the parser in Python 2.4 and 2.5; the tests in 2.x. Now all is well again. Also, pseudo-elements are now correctly made lower-case. (They are supposed to be case-insensitive.)
Version 0.9.1 ------------- Released on 2013-10-17. * **Backward incompatible change from 0.9**: :meth:`~GenericTranslator.selector_to_xpath` defaults to ignoring pseudo-elements, as it did in 0.8 and previous versions. (:meth:`~GenericTranslator.css_to_xpath` doesn’t change.) * Drop official support for Python 2.4 and 3.1, as testing was becoming difficult. Nothing will break overnight, but future releases may on may not work on these versions. Older releases will remain available on PyPI. Version 0.9 ----------- Released on 2013-10-11. Add parser support for :attr:`functional pseudo-elements <Selector.pseudo_element>`. *Update:* This version accidentally introduced a **backward incompatible** change: :meth:`~GenericTranslator.selector_to_xpath` defaults to rejecting pseudo-elements instead of ignoring them. Version 0.8 ----------- Released on 2013-03-15. Improvements: * `#22 <https://github.com/SimonSapin/cssselect/issues/22>`_ Let extended translators override what XPathExpr class is used * `#19 <https://github.com/SimonSapin/cssselect/issues/19>`_ Use the built-in ``lang()`` XPath function for implementing the ``:lang()`` pseudo-class with XML documents. This is probably faster than ``ancestor-or-self::``. Bug fixes: * `#14 <https://github.com/SimonSapin/cssselect/issues/14>`_ Fix non-ASCII pseudo-classes. (Invalid selector instead of crash.) * `#20 <https://github.com/SimonSapin/cssselect/issues/20>`_ As per the spec, elements containing only whitespace are not considered empty for the ``:empty`` pseudo-class. Version 0.7.1 ------------- Released on 2012-06-14. Code name *remember-to-test-with-tox*. 0.7 broke the parser in Python 2.4 and 2.5; the tests in 2.x. Now all is well again. Also, pseudo-elements are now correctly made lower-case. (They are supposed to be case-insensitive.)
Now just checking whether the matched non-element node has a (possibly coerced) string-length() > 0.
In this case on this document
:empty
would return<q></q>
and<r><![CDATA[]]></r>
.I believe this is the correct behaviour regarding
CDATA
, but I'm not 100% on that.