它在浏览器中以纯文本形式显示转换后的xml

时间:2017-02-28 19:01:58

标签: xml xslt transformation

我的浏览器中存在渲染问题或其他东西(?)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> firefoxIE显示为纯文字:

Chrome 如何强制输出到xml? AA 1 AB 3 AC 6无效?

2 个答案:

答案 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样式,这样做更容易理解并且更容易。