将xml文档作为参数传递给xsl

编程入门 行业动态 更新时间:2024-10-05 15:27:46
本文介绍了将xml文档作为参数传递给xsl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我已经阅读了很多文章,并尝试了很多事情,但是仍然无法使xsl在参数中找到值.我从java的sun xalan开始,但从未成功,所以我改用saxon徒劳无功.我想将两个xml文档与xls合并为一个.永远不会在文件系统上,这是用于构建xml字符串/docs的Web应用程序.我尝试将DTMAxisIterator,DomSource,Doc传递给以xsl,字符串设置的Node.在NotePad ++中使用xsl document()可以正常工作,但是我不想将xml保存在系统上.

I have read a lot of post and tried a lot of things but still can't get the xsl to find values in the parameter. I started with java's sun xalan and never got it working so I switched to saxon to no avail. I want to combine two xml docs into one with xls. Never are on a file system, this is for a web app that builds xml strings/ docs. I have tried passing an DTMAxisIterator, DomSource , Doc to Node set in xsl, string. It worked fine in NotePad++ with an xsl document() but I don't want to save the xml on the system.

XSL

<xsl:param name="RsXml" select="/"/> <xsl:template match="/policy/vehicles"> <vehicle type="DP" type_code="DP"/> <xsl:for-each select="$RsXml/InsuranceSvcRs /com.csc_PolicyOrderCurrentCarrierInqRs/PersVeh"> <vin> <xsl:value-of select="VehIdentificationNumber"/> </vin> <veh_year> <xsl:value-of select="ModelYear"/> </veh_year> <make> <xsl:value-of select="Manufacturer"/> </make> <model> <xsl:value-of select="Model"/> </model> <costnew> <xsl:value-of select="CostNewAmt/Amt"/> </costnew> <symbol> <xsl:value-of select="VehSymbolCd"/> </symbol> <wheregaraged></wheregaraged> <liabilityonly></liabilityonly> <collision></collision> <comprehensive></comprehensive> <rentalreimbursement></rentalreimbursement> <towing></towing> <altered></altered> <title></title> <enginesize> <xsl:value-of select="NumCylinders"/> </enginesize> <trailertype/> <trtonnage/> <mctype/> <mcenginecc/> <vehicleuse></vehicleuse> <mhawnings></mhawnings> <vseat15></vseat15> <vseat15text/> <extraequipment></extraequipment> <mcsidecar></mcsidecar> <atvwheels/> <damage/> <endorsements/> <avtotal/> <v_underwriting> <altered></altered> <alteredlist/> <alteredexplain/> <businessuse></businessuse> <haulstudents></haulstudents> <pulltrailers></pulltrailers> <trailerendorsement/> </v_underwriting> <driverid></driverid> <gen_classcode></gen_classcode> <classcode></classcode> <primary_veh></primary_veh> <rates> <bi></bi> <pd></pd> <med></med> <ubi></ubi> <upd></upd> <comp></comp> <coll></coll> <comm></comm> <rr></rr> <tl></tl> </rates> <xferdis></xferdis> <atv_young_dr></atv_young_dr> <mrcd_date/> <hasdamage></hasdamage> <comp_symbol></comp_symbol> <str_legal></str_legal> <addresses/> </xsl:for-each> <xsl:apply-templates/>

XML One

<?xml version="1.0" encoding="UTF-8"?> <policy id="1735"> <vehicles> </vehicles> </policy>

XML 2

<ACORD> <InsuranceSvcRs> <com.csc_PolicyOrderCurrentCarrierInqRs> <PersVeh id="001"> <ItemIdInfo> <InsurerId>001</InsurerId> </ItemIdInfo> <Manufacturer>FORD</Manufacturer> <Model>WINDSTAR</Model> <ModelYear>1999</ModelYear> <VehBodyTypeCd>ES</VehBodyTypeCd> <CostNewAmt> <Amt>23660</Amt> </CostNewAmt> <NumDaysDrivenPerWeek /> <EstimatedAnnualDistance> <NumUnits /> <UnitMeasurementCd /> </EstimatedAnnualDistance> <FullTermAmt> <Amt /> </FullTermAmt> <TerritoryCd /> <VehIdentificationNumber>1</VehIdentificationNumber> <NumCylinders>6</NumCylinders> <VehSymbolCd /> <AntiLockBrakeCd>4-WHEEL STD</AntiLockBrakeCd> <DaytimeRunningLightInd /> <DistanceOneWay> <NumUnits /> <UnitMeasurementCd>MI</UnitMeasurementCd> </DistanceOneWay> <AntiTheftDeviceCd>PASS-KEY</AntiTheftDeviceCd> <VehPerformanceCd /> <VehUseCd /> <AirBagTypeCd>BOTH</AirBagTypeCd> <com.csc_VehBodyTypeFreeformInd /> </PersVeh> </com.csc_PolicyOrderCurrentCarrierInqRs> </InsuranceSvcRs> </ACORD>

班级

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

I was able to get it work with Saxon see below code. I think the key was the document.getDocumentElement() as 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代码段

<xsl:param name="RsXml" /> <xsl:template match="/policy/vehicles"> <xsl:for-each select="$RsXml/InsuranceSvcRs/com.csc_PolicyOrderCurrentCarrierInqRs/PersVeh">

更多推荐

将xml文档作为参数传递给xsl

本文发布于:2023-11-23 21:58:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1622963.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:参数   文档   xml   xsl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!