我读了很多文章,尝试了很多事情,但仍然无法通过xsl在参数中找到值.我从java的sun xalan开始,但是从来没有运行过,所以我改用saxon徒劳无功.我想将两个xml文档与xls合并为一个.永远不会在文件系统上,这是用于构建xml字符串/ docs的Web应用程序.我尝试将DTMAxisIterator,DomSource,Doc传递给以xsl,字符串设置的Node.使用xsl document()在NotePad中运行良好,但我不想将xml保存在系统上.
XSL
XML一
XML二
001
FORD
WINDSTAR
1999
ES
23660
1
6
4-WHEEL STD
MI
PASS-KEY
BOTH
类
public String transformResultXML(String xmlSource, Templates xsl,String policyXml ) {
String result = "";
try {
StringWriter writer = new StringWriter();
StringReader reader2 = new StringReader(policyXml);
XmlHelper xh = new XmlHelper();
Document xmlSrc = xh.loadDoc(xmlSource);
DOMSource source = new DOMSource(xmlSrc);
ByteArrayInputStream byteStream = new ByteArrayInputStream(xmlSource.getBytes());
StringReader reader = new StringReader(xmlSource);
SAXSource source2 = new SAXSource(new XMLFilterImpl(), new InputSource(reader));
TransformerFactory transFact = new com.icl.saxon.TransformerFactoryImpl();
Transformer transformer = transFact.newTransformer();
transformer.setParameter("RsXml",source2);
// transformer.setParameter("RsXml",xmlSrc);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new javax.xml.transform.stream.StreamSource(reader2),
new javax.xml.transform.stream.StreamResult(writer));
result = writer.toString();
System.out.println(result);
} catch( Exception e ) {
e.printStackTrace();
}
return result;
}
解决方法:
我能够与Saxon一起使用,请参见下面的代码.我认为关键是document.getDocumentElement()作为parm
public String transformResultXML(String xmlSource, Templates xsl,String policyXml ) {
String result = "";
try {
StringWriter writer = new StringWriter();
StringReader reader2 = new StringReader(policyXml);
DocumentBuilderFactory dfactory =
DocumentBuilderFactory.newInstance( "com.icl.saxon.om.DocumentBuilderFactoryImpl",null);
dfactory.setNamespaceAware(true);
DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
org.w3c.dom.Document document = docBuilder.parse(new InputSource(new StringReader(xmlSource)));
Transformer transformer = xsl.newTransformer();
transformer.setParameter("RsXml", document.getDocumentElement());
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new javax.xml.transform.stream.StreamSource(reader2),
new javax.xml.transform.stream.StreamResult(writer));
result = writer.toString();
System.out.println(result);
} catch( Exception e ) {
e.printStackTrace();
}
XSL代码段
标签:saxon,xalan,xml,xslt,java
来源: https://codeday.me/bug/20191031/1977329.html