用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)));
因为原xml文档中定义的命名空间,而xsl模板中没有引用该空间,所以<xsl:choose><xsl:when>里的xpath都没有识别,结果生成的html是一大坨不带标签的纯文本。
但是用struts的action可以成功转换,像这样:
<action name="reportDisplay" class="com.ReportAction">
<result name="S005" type="xslt">
<param name="stylesheetLocation">/WEB-INF/webpage/xsl/BC.xsl</param>
<param name="exposedValue">report</param>
</result>
</action>
因为struts是用DOMSource去转化的,解决如下:
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)));