xslt转换成html后没有html标签

用xalan转化时的问题:

这是网上的示例代码:

String xsltPath="C:\\XTX.xsl";
String xmlPath="C:\\76552.xml";
String htmlPath="C:\\Users\\Administrator\\Desktop\\654.html";
TransformerFactory tFactory = TransformerFactory.newInstance();
		 Transformer transformer =
		      tFactory.newTransformer
		         (new javax.xml.transform.stream.StreamSource
		            (xsltPath));
		 transformer.transform
	      (new javax.xml.transform.stream.StreamSource
	            (xmlPath),
	       new javax.xml.transform.stream.StreamResult
	            ( new FileOutputStream(htmlPath)));

这样转化后的html是失败的,似乎是在xslt里调用java方法时出了问题,struts在转化xsl时候用DOMSource进行了格式化,改用DOMSource作为Transformer的传入参数就可以成功转换,解决如下:

String xsltPath="C:\\XTX.xsl";
String xmlPath="C:\\76552.xml";
String htmlPath="C:\\Users\\Administrator\\Desktop\\654.html";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    
DocumentBuilder builder=factory.newDocumentBuilder();    
Document document=builder.parse(new File(xmlPath));    
document.normalize(); 
			
DOMSource source=new DOMSource(document);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer
			         (new javax.xml.transform.stream.StreamSource
			            (xsltPath));
transformer.transform(source, new javax.xml.transform.stream.StreamResult(
					new FileOutputStream(htmlPath)));

后来发现这种方式是简单粗暴的,用FileOutputStream作为Transformer.transform的传参是有隐患的:

我的xslt有这么一句:

<xsl:element name="img">
           <xsl:attribute name="src" >data:<xsl:value-of select="value/@mediaType" /> ;base64,<xsl:value-of select="value" /></xsl:attribute>
           <xsl:attribute name="width">700px</xsl:attribute>
           <xsl:attribute name="hspace">4px</xsl:attribute>
           <xsl:attribute name="vspace">10px</xsl:attribute>
</xsl:element>

源xml的图片是base64编码的图片, 直接用FileOutputStream图片转换异常,FileOutputStream外层用 PrintStream格式化后,可转换成功。


transformer.transform(source, new javax.xml.transform.stream.StreamResult(
					new FileOutputStream(htmlPath)));

fos=new FileOutputStream(remote_html_file);
PrintWriter writer =  new PrintWriter( new OutputStreamWriter(fos)); 

transformer.transform(source,new javax.xml.transform.stream.StreamResult(writer));





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值