我正在尝试使用单个xml和最多一个xsl样式表,xml文件的内容如下所示
<catalogue>
<item>
<item_id>1234</item_id>
<item_desc>hi-fi sanio</item_desc>
<price>12.50</price>
<image>iVBORw0KGgoAAAANSUhEUgAAANIAAAAzCAYAAADigVZlAAA</image>
</item>
<item>
<item_id>4614</item_id>
<item_desc>lace work</item_desc>
<price>1.50</price>
<image>QN0lEQVR4nO2dCXQTxxnHl0LT5jVteHlN+5q+JCKBJITLmHIfKzBHHCCYBAiEw</image>
</item>
<item>
<item_id>614</item_id>
<item_desc>bicycle</item_desc>
<price>150</price>
<image>jVteHlN+5q+JCKBJITLmHIfKzBHHCCYBAiEwlEQVR4nO2dCXQTxxnHl0L</image>
</item>
</catalogue>
目的是能够与最终用户共享xml文件,以便他们可以使用他们的Web浏览器(IE11)进行查看。
我正在使用python和lxml来创建xml文件我使用base64编码对项目的图像进行了编码,并为每个项目添加了一个图像节点。 我真的想直接在xml中嵌入图像,所以当最终用户打开它时,所有内容都会在浏览器中呈现。即没有超链接
我不知道如何让最终用户浏览器解码图像节点。它们没有任何应用程序可以解码,所以一切都必须在xml或使用浏览器的相关样式表中。
有谁知道是否可以使用xsl解码嵌入在xml文档中的图像? 我可以看看的任何例子,看看它将如何完成。
一般来说,仅使用xml或与xsl一起编码然后解码(嵌入)图像(png / jpg)的好方法是什么?
此致
答案 0 :(得分:1)
如果您的XML中包含base64编码数据,并且希望在HTML中嵌入img
这些数据,那么您可以在XSLT代码中使用{{<img src="data:image/png;base64,{.}"/>
构建一个data
图像元素1}} URI(https://en.m.wikipedia.org/wiki/Data_URI_scheme)(当然还有图像数据的正确MIME类型),这是一个示例(假设MIME类型为image/png
):
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="about:legacy-compat" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<head>
<title>data URI test</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="catalogue">
<table>
<thead>
<xsl:apply-templates select="item[1]" mode="header"/>
</thead>
<tbody>
<xsl:apply-templates/>
</tbody>
</table>
</xsl:template>
<xsl:template match="item" mode="header">
<tr>
<xsl:apply-templates mode="header"/>
</tr>
</xsl:template>
<xsl:template match="item/*" mode="header">
<th>
<xsl:value-of select="local-name()"/>
</th>
</xsl:template>
<xsl:template match="item">
<tr>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="item/*">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="item/image">
<td>
<img src="data:image/png;base64,{.}"/>
</td>
</xsl:template>
</xsl:transform>
分别在http://home.arcor.de/martin.honnen/xslt/test2016080901.xml http://home.arcor.de/martin.honnen/xslt/test2016080901.xsl联机,第一个image
元素我使用了维基百科文章中的示例图像数据和所有四个浏览器(IE,Edge,Chrome,Firefox)渲染嵌入的图像。来自输入XML的示例数据似乎没有被识别为image/png
,我也尝试了image/jpeg
但没有任何成功,我不确定是什么类型的图像数据。