diff options
| author | 2016-08-12 10:43:31 +0200 | |
|---|---|---|
| committer | 2016-08-12 10:43:31 +0200 | |
| commit | 112b744665330d535d98a72036fd3600e8184593 (patch) | |
| tree | a1f5356c4e80b0f6332ecd30c0d79be9936eb5a8 /lib/lib_opml.php | |
| parent | 5e9152288177a0f4237fd1e4c40b09ce1838fb6a (diff) | |
| parent | 2c92860310d389f33fe7a10011e2a3921883b7bc (diff) | |
Merge pull request #1206 from Alkarex/OPML-categories
Support for OPML 2.0 category attribute
Diffstat (limited to 'lib/lib_opml.php')
| -rw-r--r-- | lib/lib_opml.php | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/lib/lib_opml.php b/lib/lib_opml.php index 66b854313..a3af54596 100644 --- a/lib/lib_opml.php +++ b/lib/lib_opml.php @@ -12,7 +12,7 @@ * * @author Marien Fressinaud <dev@marienfressinaud.fr> * @link https://github.com/marienfressinaud/lib_opml - * @version 0.2 + * @version 0.2-FreshRSS~1.5.1 * @license public domain * * Usages: @@ -123,6 +123,32 @@ function libopml_parse_outline($outline_xml, $strict = true) { return $outline; } +/** + * Reformat the XML document as a hierarchy when + * the OPML 2.0 category attribute is used + */ +function preprocessing_categories($doc) { + $outline_categories = []; + $body = $doc->getElementsByTagName('body')->item(0); + $xpath = new DOMXpath($doc); + $outlines = $xpath->query('/opml/body/outline[@category]'); + foreach ($outlines as $outline) { + $category = trim($outline->getAttribute('category')); + if ($category != '') { + $outline_categorie = null; + if (!isset($outline_categories[$category])) { + $outline_categorie = $doc->createElement('outline'); + $outline_categorie->setAttribute('text', $category); + $body->insertBefore($outline_categorie, $body->firstChild); + $outline_categories[$category] = $outline_categorie; + } else { + $outline_categorie = $outline_categories[$category]; + } + $outline->parentNode->removeChild($outline); + $outline_categorie->appendChild($outline); + } + } +} /** * Parse a string as a XML one and returns the corresponding array @@ -140,6 +166,9 @@ function libopml_parse_string($xml, $strict = true) { $dom->loadXML($xml); $dom->encoding = 'UTF-8'; + //Partial compatibility with the category attribute of OPML 2.0 + preprocessing_categories($dom); + $opml = simplexml_import_dom($dom); if (!$opml) { |
