parser: properly support tag subtrees instead of text content for article content

This commit is contained in:
Andrew Dolgov 2016-01-23 01:48:32 +03:00
parent d2bb392bae
commit 7d1e15c396
3 changed files with 19 additions and 6 deletions

View File

@ -75,7 +75,7 @@ class FeedItem_Atom extends FeedItem_Common {
} }
} }
return $content->nodeValue; return $this->subtree_or_text($content);
} }
} }
@ -95,7 +95,7 @@ class FeedItem_Atom extends FeedItem_Common {
} }
} }
return $content->nodeValue; return $this->subtree_or_text($content);
} }
} }

View File

@ -70,6 +70,17 @@ abstract class FeedItem_Common extends FeedItem {
} }
} }
function count_children($node) {
return $node->getElementsByTagName("*")->length;
}
function subtree_or_text($node) {
if ($this->count_children($node) == 0) {
return $node->nodeValue;
} else {
return $node->c14n();
}
}
} }
?> ?>

View File

@ -71,17 +71,19 @@ class FeedItem_RSS extends FeedItem_Common {
$contentB = $this->elem->getElementsByTagName("description")->item(0); $contentB = $this->elem->getElementsByTagName("description")->item(0);
if ($contentA && !$contentB) { if ($contentA && !$contentB) {
return $contentA->nodeValue; return $this->subtree_or_text($contentA);
} }
if ($contentB && !$contentA) { if ($contentB && !$contentA) {
return $contentB->nodeValue; return $this->subtree_or_text($contentB);
} }
if ($contentA && $contentB) { if ($contentA && $contentB) {
return mb_strlen($contentA->nodeValue) > mb_strlen($contentB->nodeValue) ? $resultA = $this->subtree_or_text($contentA);
$contentA->nodeValue : $contentB->nodeValue; $resultB = $this->subtree_or_text($contentB);
return mb_strlen($resultA) > mb_strlen($resultB) ? $resultA : $resultB;
} }
} }