diff --git a/HTMLKit/HTMLStackOfOpenElements.m b/HTMLKit/HTMLStackOfOpenElements.m
index 7747366..daf1517 100644
--- a/HTMLKit/HTMLStackOfOpenElements.m
+++ b/HTMLKit/HTMLStackOfOpenElements.m
@@ -129,7 +129,11 @@
- (void)popElementsUntilElementPoppedWithTagName:(NSString *)tagName
{
- while (self.currentNode && ![self.currentNode.tagName isEqualToString:tagName]) {
+ while (self.currentNode) {
+ if (self.currentNode.htmlNamespace == HTMLNamespaceHTML &&
+ [self.currentNode.tagName isEqualToString:tagName]) {
+ break;
+ }
[_stack removeLastObject];
}
[_stack removeLastObject];
@@ -137,7 +141,11 @@
- (void)popElementsUntilAnElementPoppedWithAnyOfTagNames:(NSArray *)tagNames
{
- while (self.currentNode && ![tagNames containsObject:self.currentNode.tagName]) {
+ while (self.currentNode) {
+ if (self.currentNode.htmlNamespace == HTMLNamespaceHTML &&
+ [tagNames containsObject:self.currentNode.tagName]) {
+ break;
+ }
[_stack removeLastObject];
}
[_stack removeLastObject];
@@ -257,7 +265,10 @@
{
for (HTMLElement *node in _stack.reverseObjectEnumerator) {
if ([tagNames containsObject:node.tagName]) {
- return node;
+ NSNumber *namespace = elementTypes[node.tagName] ?: @(HTMLNamespaceHTML);
+ if ([namespace isEqual:@(node.htmlNamespace)]) {
+ return node;
+ }
}
if ([elementTypes[node.tagName] isEqual:@(node.htmlNamespace)]) {
return nil;