我的浏览器中存在渲染问题或其他东西(?)xml转换,所以我有这个if (findViewById(R.id.containerDetail) == null) {
// Phone layout
}
else {
// Tablet layout
}
文档
book.xml
并希望使用以下<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
<books>
<book title="AA" price="1"/>
<book title="AB" price="3"/>
<book title="AC" price="6"/>
</books>
文档进行转换:
book.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" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<books>
<xsl:for-each select="books/book">
<book>
<title><xsl:value-of select="@title"/></title>
<price><xsl:value-of select="@price"/></price>
</book>
</xsl:for-each>
</books>
</xsl:template>
</xsl:stylesheet>
,firefox
,IE
显示为纯文字:
Chrome
如何强制输出到xml? AA 1 AB 3 AC 6
无效?
答案 0 :(得分:0)
我同意@Martin Honnen。浏览器用于显示HTML内容,而不是像您所希望的XML内容。现代浏览器似乎无法满足这种使用场景。
事实上,XML + XSLT场景似乎因任何原因而受到普遍蔑视。
我不明白,我/我确实理解这一点。
恕我直言,这种方法远远优于目前的WWW状态。将XSLT转换为XHTML-5(并非真正存在)客户端的XML文件将是对Web技术的巨大改进。猜猜谁赢了......
所以,回到回答你的问题:
浏览器会渲染HTML,因此设置<xsl:output method="html" ... />
并使用HTML标记围绕您的输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:apply-templates select="books/book" />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="book">
<tr> <!-- changed from <books> -->
<td width="100" align="center"><xsl:value-of select="@title"/></td> <!-- changed from <title> -->
<td width="60" align="center"><xsl:value-of select="@price"/></td> <!-- changed from <price> -->
</tr>
</xsl:template>
</xsl:stylesheet>
此模板将为您提供在现代浏览器上良好显示的结果(为file:///
启用NoScript规则!)。
答案 1 :(得分:0)
如果您想在浏览器中使用XML到XML转换,那么对于浏览器知道要渲染的结果格式(如XHTML和/或SVG和/或MathML)来说,它们最有意义。对于未知的,任意的XML格式,浏览器除了渲染非样式化的结果树之外什么都不做,所以基本上是文本节点。我认为只有Opera用于将其可折叠的XML源视图呈现应用于XML转换结果。
在其他浏览器中,为了获得一些具有视觉意义的渲染,您可以将CSS应用于结果文档,就像https://martin-honnen.github.io/js/2017/test2017022801.xml中所做的那样,我已经使用了您的XSLT代码并对其进行了调整以输出处理指令{{1}将CSS样式表与转换结果元素相关联,基本上将xml-stylesheet
结果呈现为一个表,其中books
元素构成行,子元素构成单元格。
所以XSLT是
book
CSS是
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:processing-instruction name="xml-stylesheet">type="text/css" href="test2017022801.css"</xsl:processing-instruction>
<books>
<xsl:for-each select="books/book">
<book>
<title><xsl:value-of select="@title"/></title>
<price><xsl:value-of select="@price"/></price>
</book>
</xsl:for-each>
</books>
</xsl:template>
</xsl:stylesheet>
然后我尝试过的所有四种浏览器(Windows 10的当前版本的IE,Edge,Firefox,Chrome)都将XML结果数据呈现为一个表格。
但是,在我看来,使用语法和渲染简单地将XML转换为HTML元素而不是尝试使用类似于HTML的CSS来设置XML样式,这样做更容易理解并且更容易。