我有这个RSS我想用XSLT进行转换:
<?xml version="1.0" encoding="utf-8" ?>
<rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://www.example1.com">
<title>atitle</title>
<link>alink</link>
</channel>
<item rdf:about="http://www.example2.com">
<title>atitle2</title>
<link>alink2</link>
</item>
<item rdf:about="http://www.example3.com">
<title>atitle3</title>
<link>alink3</link>
</item>
<!--There's more to the file-->
</rdf>
我不得不使用这种转变
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
清除文件的属性,使其看起来像这样
<?xml version="1.0" encoding="utf-8" ?>
<rdf>
<channel>http://www.example1.com
<title>atitle</title>
<link>alink</link>
</channel>
<item>http://www.example2.com
<title>atitle2</title>
<link>alink2</link>
</item>
<item>http://www.example2.com
<title>atitle3</title>
<link>alink3</link>
</item>
<!--There's more to the file-->
</rdf>
我的主要目标是简单地列出这样的项目:
<items>
<item title="atitle2" link="alink2">
<item title="atitle3" link="alink3">
</items>
我是否必须进行第二次转型?
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/rdf">
<items>
<xsl:for-each select="/item">
<item>
<xsl:attribute name="title">
<xsl:value-of select="title"/>
</xsl:attribute>
<xsl:attribute name="link">
<xsl:value-of select="link"/>
</xsl:attribute>
</item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
或者有没有办法同时应用两个转换?或者我必须单独申请?或者可能比我正在尝试的方式更简单?
答案 0 :(得分:2)
这个样式表怎么样:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://purl.org/rss/1.0/" exclude-result-prefixes="ns">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<items>
<xsl:apply-templates select="//ns:item"/>
</items>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="*" mode="child"/>
</xsl:element>
</xsl:template>
<xsl:template match="*" mode="child">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>