如何使用 xsltproc 从 XML 提要中提取播客 URL?
How to extract podcast URLs from XML feed with xsltproc?
我想使用 xsltproc(或我可以在 Bash 中使用的任何其他工具)从播客提要中提取 URL。有以下两种类型的 XML 供稿。
类型 A
<rss xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>Podcast</title>
<item>
<title>Episode</title>
<media:content url="http://example.org/example.mp3" fileSize="1234" type="audio/mpeg"/>
</item>
</channel>
</rss>
类型 B
<rss>
<channel>
<title>Podcast</title>
<item>
<title>Episode</title>
<guid>episode::x</guid>
<enclosure type="image/jpeg" url="http://example.org/coverart.jpg"/>
<enclosure type="audio/mpeg" url="http://example.net/audio.mp3"/>
</item>
</channel>
</rss>
我有以下样式表,returns 来自类型 B 而不是来自类型 A 的 URL。我什至可以将这两个混合在一个样式表中吗?
<?xml version="1.0"?>
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<output method="text"/>
<template match="/">
<for-each select = "rss/channel/item/enclosure">
<value-of select="@url"/><text> </text>
</for-each>
<for-each select = "rss/channel/item/media">
<value-of select="@url"/><text> </text>
</for-each>
</template>
</stylesheet>
在 Type A XML 中,有一个与别名为 media
的 <content>
节点关联的命名空间。名称空间不包含在样式表中。它需要包含在样式表中,以便正确访问与命名空间关联的元素。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:media="http://search.yahoo.com/mrss/"
exclude-result-prefixes="media">
在模板中,for-each
循环应该是 media:content
,(缺少 content
元素)。
<xsl:for-each select="//media:content">
<xsl:value-of select="@url" />
<xsl:text> </xsl:text>
</xsl:for-each>
我想使用 xsltproc(或我可以在 Bash 中使用的任何其他工具)从播客提要中提取 URL。有以下两种类型的 XML 供稿。
类型 A
<rss xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>Podcast</title>
<item>
<title>Episode</title>
<media:content url="http://example.org/example.mp3" fileSize="1234" type="audio/mpeg"/>
</item>
</channel>
</rss>
类型 B
<rss>
<channel>
<title>Podcast</title>
<item>
<title>Episode</title>
<guid>episode::x</guid>
<enclosure type="image/jpeg" url="http://example.org/coverart.jpg"/>
<enclosure type="audio/mpeg" url="http://example.net/audio.mp3"/>
</item>
</channel>
</rss>
我有以下样式表,returns 来自类型 B 而不是来自类型 A 的 URL。我什至可以将这两个混合在一个样式表中吗?
<?xml version="1.0"?>
<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<output method="text"/>
<template match="/">
<for-each select = "rss/channel/item/enclosure">
<value-of select="@url"/><text> </text>
</for-each>
<for-each select = "rss/channel/item/media">
<value-of select="@url"/><text> </text>
</for-each>
</template>
</stylesheet>
在 Type A XML 中,有一个与别名为 media
的 <content>
节点关联的命名空间。名称空间不包含在样式表中。它需要包含在样式表中,以便正确访问与命名空间关联的元素。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:media="http://search.yahoo.com/mrss/"
exclude-result-prefixes="media">
在模板中,for-each
循环应该是 media:content
,(缺少 content
元素)。
<xsl:for-each select="//media:content">
<xsl:value-of select="@url" />
<xsl:text> </xsl:text>
</xsl:for-each>