我从几种 XML 格式转换为一种标准。
我的 XSL 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="list | store">
<list>
<xsl:for-each select="item | product | product-store">
<item>
<name>
<xsl:choose>
<xsl:when test="name"><xsl:value-of select="substring-before(name, ' ')" /></xsl:when>
<xsl:otherwise><xsl:value-of select="name | title" /></xsl:otherwise>
</xsl:choose>
</name>
<desc>
<xsl:choose>
<xsl:when test="name"><xsl:value-of select="substring-after(name, ' ')" /></xsl:when>
<xsl:otherwise><xsl:value-of select="desc" /></xsl:otherwise>
</xsl:choose>
</desc>
<nr><xsl:value-of select="index | number" /></nr>
</item>
</xsl:for-each>
</list>
</xsl:template>
</xsl:stylesheet>
我的示例 XML 是
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
<list>
<item>
<index>1362242627</index>
<name>test 22</name>
</item>
<item>
<index>2362625609</index>
<name>test 4</name>
</item>
<item>
<index>736274650</index>
<name>test 76</name>
</item>
</list>
为什么在 Firefox 17、IE9、Google Chrome 等浏览器中无法正确显示?它们像普通文本一样显示它,但返回类型是“text/xml”。
它仅在 Opera 中正常工作。
我认为问题在于分辨什么是“正确”的显示。像 Firefox 或 IE 这样的浏览器会假定一旦您加载了带有以下内容的 XML 文档:xml-stylesheet
类型的处理指令text/xsl
在浏览器窗口中,您希望将 XML 转换为浏览器知道要呈现的内容,例如 HTML 或现在的 (X)HTML 加 SVG(或加 MathML)。然而,您的样式表获取 XML 输入并将其转换为浏览器未知的某种 XML 结果格式,因此它所做的只是呈现结果树中文本节点的内容。 Opera 似乎将 XML 输入转换为 XML 结果,但随后它似乎认识到结果格式未知,并决定渲染结果的源树。这可能是您喜欢的,但我不确定是否有规范要求这种行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)