我想将XML转换为其他格式的XML,因此我使用了XSLT。但结果却很糟糕。
XML:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
</catalog>
XSLT :
<?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" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<root>
<items>
<xsl:for-each select="catalog/cd">
<item>
<xsl:value-of select="artist"/>
</item>
</xsl:for-each>
</items>
</root>
</xsl:template>
</xsl:stylesheet>
我想要的结果(在浏览器中):
<?xml version="1.0" encoding="utf-8"?>
<root>
<items>
<item>Empire Burlesque</item>
<item>Hide your heart</item>
<item>Greatest Hits</item>
</items>
</root>
真实结果(在浏览器中):
Empire Burlesque Hide your heart Greatest Hits
我的XSLT出了什么问题?
答案 0 :(得分:2)
我打赌您正在使用Firefox,并且它试图将其呈现为HTML,这意味着它删除了它无法理解的标签。 尝试右键单击页面并查看源并查看页面源是否正确。
答案 1 :(得分:2)
您可以将xsl更改为:
<?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" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<root>
<xsl:for-each select="catalog/cd">
<items>
<item>
<xsl:value-of select="title"/>
<xsl:text xml:space="preserve"> </xsl:text>
</item>
</items>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
这将在浏览器中生成:
Empire Burlesque
Hide your heart
Greatest Hits
如果你点击它,在firefox中,你选择web developer > view source > view generated source
,你会得到这个:
<root><items><item>Empire Burlesque
</item></items><items><item>Hide your heart
</item></items><items><item>Greatest Hits
</item></items></root>
这就是你所说的你想要的。
请记住,在浏览器中,您将看到文本,所有不是html的标签都将被丢弃。如果检查源代码,您将看到xml文件,因为这是您加载的内容。如果您检查生成的源是转换告诉浏览器显示的内容。
默认情况下,浏览器的渲染引擎使用html,这就是它忽略任何其他标记的原因。
再见
答案 2 :(得分:1)
您似乎对它在浏览器中呈现的方式感兴趣。在这种情况下,也许这就是你想要的......
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes" />
<xsl:template match="/">
<xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>
<html>
<head>
<meta charset="utf-8" />
<title>List of CDs</title>
</head>
<body>
<ul>
<xsl:for-each select="catalog/cd">
<li><xsl:value-of select="artist"/></li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>