Skip to content
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

Feature Request: Add XSLT support #1

Open
weierophinney opened this issue Dec 31, 2019 · 5 comments
Open

Feature Request: Add XSLT support #1

weierophinney opened this issue Dec 31, 2019 · 5 comments

Comments

@weierophinney
Copy link
Member

It would be nice to style generated feeds with a xsl:stylesheet. See the XSLT entry on Wikipedia for more general information about this.

I was thinking about adding a header to reference the stylesheet, e.g.

<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="podcast.xsl"?>

taken from an ORF podcast feed.


Originally posted by @podcasthosting at zendframework/zend-feed#107

@weierophinney
Copy link
Member Author

An XSLT transformation is usually best applied to the XML feed directly, and not through a third party component or language. XSLT is Turing complete, and also a very good FP language, so I'd suggest digging that way first (by piping the XML directly through CLI XML tools).


Originally posted by @Ocramius at zendframework/zend-feed#107 (comment)

@weierophinney
Copy link
Member Author

@Ocramius If I understand you correctly than what you are suggesting is not what I want to achieve. I want to make a RSS feed look good in the browser. It should be the feed generated through zend-feed itself without piping it through any extra tools.


Originally posted by @podcasthosting at zendframework/zend-feed#107 (comment)

@weierophinney
Copy link
Member Author

I'd rather say that you take the RSS feed (input or output) and pass it to XSLT directly: XSLT is good and mature, use it 👍


Originally posted by @Ocramius at zendframework/zend-feed#107 (comment)

@froschdesign
Copy link
Member

taken from an ORF podcast feed.

Example: https://files.orf.at/podcast/oe1/oe1_imoe1journalzugast.xml

@froschdesign
Copy link
Member

@podcasthosting
Please try the following example: (based on "Writer: Getting Started")

// Create feed
$feed = new Laminas\Feed\Writer\Feed;
$feed->setTitle("Paddy's Blog");
$feed->setDescription("Paddy's Blog");
$feed->setLink('http://www.example.com');

// Create entry
$entry = $feed->createEntry();
$entry->setTitle('All Your Base Are Belong To Us');
$entry->setLink('http://www.example.com/all-your-base-are-belong-to-us');
$entry->addAuthor([
    'name'  => 'Paddy',
    'email' => '[email protected]',
    'uri'   => 'http://www.example.com',
]);
$entry->setDateModified(time());
$entry->setDateCreated(time());
$entry->setDescription('Exposing the difficulty of porting games to English.');
$entry->setContent(
    'I am not writing the article. The example is long enough as is ;).'
);
$feed->addEntry($entry);

// Render feed (creates DOMDocument object)
$writer = new Laminas\Feed\Writer\Renderer\Feed\Rss($feed);
$writer->render();

// Add processing instruction
$writer->getElement()->parentNode->insertBefore(
    $writer->getDomDocument()->createProcessingInstruction(
        'xml-stylesheet',
        'title="Demo" type="text/xsl" href="https://files.orf.at/podcast/oe1/podcast.xsl"'
    ),
    $writer->getElement()
);

// Ouput XML
echo $writer->saveXml();

Ouput:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet title="Demo" type="text/xsl" href="https://files.orf.at/podcast/oe1/podcast.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
    <channel>
        <title>Paddy's Blog</title>
        <description>Paddy's Blog</description>
        <generator>Laminas_Feed_Writer 2 (https://getlaminas.org)</generator>
        <link>http://www.example.com</link>
        <item>
            <title>All Your Base Are Belong To Us</title>
            <description><![CDATA[Exposing the difficulty of porting games to English.]]></description>
            <pubDate>Thu, 24 Sep 2020 06:43:50 +0000</pubDate>
            <link>http://www.example.com/all-your-base-are-belong-to-us</link>
            <guid>http://www.example.com/all-your-base-are-belong-to-us</guid>
            <author>[email protected] (Paddy)</author>
            <dc:creator>Paddy</dc:creator>
            <content:encoded><![CDATA[I am not writing the article. The example is long enough as is ;).]]></content:encoded>
            <slash:comments>0</slash:comments>
        </item>
    </channel>
</rss>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants