Tag: xslt

使用Java进行XSLT处理:在参数中传递xml内容

我想在处理XSLT时传递包含XML内容的参数。 这是我的代码: import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; File xmlFile = new File(xmlFilePath); File xsltFile = new File(xslFilePath); Source xmlSource = new StreamSource(xmlFile); Result result = new StreamResult(System.out); TransformerFactory transFact = TransformerFactory.newInstance(); Transformer trans = transFact.newTransformer(xsltSource); trans.setParameter(“foo”, “Hello1Hello2”); trans.transform(xmlSource, result); 然后我想在我的XSL文件中选择’bar’标签中包含的值。 … 但这不起作用,我收到此错误消息: org.apache.xpath.objects.XString cannot be cast […]

如何使用Java使用XSL转换XML

我目前正在使用标准的javax.xml.transform库,使用XSL将我的XML转换为CSV。 我的XSL文件很大 – 大约950行。 我的XML文件也可能非常大。 它在原型阶段运行良好,只有一小部分XSL在大约50行左右。 现在在“最终系统”中,当它执行变换时,它会出现错误分支目标偏移量太大而不是简短 。 private String transformXML() { String formattedOutput = “”; try { TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer( new StreamSource( xslFilename ) ); StreamSource xmlSource = new StreamSource(new ByteArrayInputStream( xmlString.getBytes() ) ); ByteArrayOutputStream baos = new ByteArrayOutputStream(); transformer.transform( xmlSource, new StreamResult( baos ) ); formattedOutput = baos.toString(); […]

替换特殊字符,如– 和— 在xml文档中出现相应的代码,如– 等等

我想替换像&ndash这样的特殊字符; 和— 在xml文档中出现相应的代码,如– 等等 我有一个包含几个特殊字符的输入xml文档 The war was between1890–1900 something—something else 还有其他几个像’ 单引号 我的xslt代码如下 ….. ….. 我解析的java代码如下(我正在使用saxon9。) package com.xsltprocessor; import java.io.File; import java.io.FileInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; public class ParseUsingSAX { public ParseUsingSAX() { } public void parseBookContent(String xsltFile) { try […]

exception创建xml文件

我正在尝试创建一个xml文件。当我创建文件时,我得到了这个错误。 我真的不知道它是什么。这是一个非常奇怪的错误。文件正确创建但内部没有任何内容。 Exception in thread “AWT-EventQueue-0” java.lang.AbstractMethodError: gnu.xml.dom.DomDocument.getXmlStandalone()Z at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:377) at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:131) at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:98) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:683) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:727) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:340) at org.w3c.jigmonitor.controller.Controller.writePerformancesXmlFile(Controller.java:191) at org.w3c.jigmonitor.controller.Controller.actionPerformed(Controller.java:68) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at […]

Java / XSLT:找不到匹配的1参数函数

我收到以下错误: javax.servlet.ServletException: Cannot find a matching 1-argument function named {http://exslt.org/dynamic}evaluate() at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841) at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774) 我的xslt文件的顶部是 你知道为什么我会收到这个错误吗? UPDATE 我的XML文件的顶部现在读取。 我们失败的XML是 此代码适用于运行Tomcat 5.0的一台服务器,但不适用于运行Tomcat 5.5的服务器。 我想是因为代码在一台服务器上运行而不是环境问题。 XSLT通过JSP页面应用于XML。 对我来说,看起来没有使用xalan.jar文件。 JSP的顶部是: 更新问题是Saxon被选为XML解析器。 Saxon不支持此function。 删除Saxon.jar可以解决问题。

Java中使用params的高效XSLT管道

这个问题的最佳答案描述了一种在Java中实现高效XSLT管道的技术: Java中的高效XSLT管道(或将结果重定向到源) 不幸的是,虽然Transformer似乎公开了一个用于设置XSLT参数的API,但这似乎没有任何效果。 例如,我有以下代码: Transformer.java import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.Templates; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.Transformer; import java.io.File; public class MyTransformer { public static void main(String[] args) throws javax.xml.transform.TransformerConfigurationException, javax.xml.transform.TransformerException{ SAXTransformerFactory stf = (SAXTransformerFactory)TransformerFactory.newInstance(); // These templates objects could be reused and obtained from elsewhere. Templates templates1 = stf.newTemplates(new StreamSource( […]

如何从XML反序列化Java对象?

我相信这可能已经详细讨论或回答过,但是我需要更多关于我的情况的最佳方法的信息…… 问题: 我们有一些大型XML数据(从100k到5MB不等),我们需要将它们扩展到Java对象中。 问题是数据根本不能很好地映射到对象上,所以我们只需要拉出数据的某些部分并创建对象。 鉴于此,JAXB或XStream等解决方案确实不合适。 因此,我们需要将XML数据拉出并尽可能高效地将其转换为java对象。 可能的解决方案: 我看到它的方式,我们有3种可能的解决方案: SAX解析 DOM解析 XSLT 我们可以将XML加载到任何JAXP实现中,并使用上述方法之一拉出数据。 问题(S) 我有几个问题/疑虑: XSLT如何在幕后工作? 它只是一个DOM解析器吗? 我问,因为XSLT似乎是一个很好的方法,但我真的不想考虑它,如果它不会给我们比DOM更好的性能。 有哪些流行的库提供DOM,XSLT和SAX XML解析器? 根据您的经验,选择DOM,SAX或XSLT的原因是什么? DOM或XSLT的易用性是否完全支配SAX提供的性能改进? 那里有任何基准吗? 我发现的那些是旧的(如8岁)。 因此,最近的一些基准将不胜感激。 除了上面提到的那些我还有什么其他解决方案可能会丢失吗? 编辑: 一些说明……您可以使用XSLT直接将值注入Java对象…它通常用于将XML转换为其他XML,但我是从调用XSLT到java的方法的角度来谈论注入价值。 我还不清楚XSLT处理器是如何正常工作的…它如何将XML提供给你编写的XSLT代码?

Java中的Saxon:用于CSV到XML的XSLT

大部分继续从这个问题: XSLT:CSV(或平面文件,或纯文本)到XML 所以,我从这里有一个XSLT: http : //andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html 它将CSV文件转换为XML文档。 它在命令行上与以下命令一起使用时执行此操作: java -jar saxon9he.jar -xsl:csv-to-xml.csv -it:main -o:output.xml 所以现在问题变成了: 我如何在Java代码中执行此操作? 现在我的代码看起来像这样: TransformerFactory transformerFactory = TransformerFactory.newInstance(); StreamSource xsltSource = new StreamSource(new File(“location/of/csv-to-xml.xsl”)); Transformer transformer = transformerFactory.newTransformer(xsltSource); StringWriter stringWriter = new StringWriter(); transformer.transform(documentSource, new StreamResult(stringWriter)); String transformedDocument = stringWriter.toString().trim(); ( Transformer是net.sf.saxon.Controller一个实例。) 命令行上的技巧是指定“-it:main”以指向XSLT中的命名模板。 这意味着您不必为源文件提供“-s”标志。 问题再次出现在Java方面。 我在哪里/如何指定“-it:main”? 不这样做会打破其他不需要指定的XSLT吗? 我是否必须在每个XSLT文件中命名每个模板“main?” 鉴于Transformer.transform()的方法签名,我必须指定源文件,那么这不能打败我在搞清楚这个问题时所取得的所有进展吗? 编辑:我发现s9api隐藏在saxon9he.jar中,如果有人正在寻找它。

XML:处理大数据

您为以下目的推荐的XML解析器是什么: XML文件(格式化,包含空格)大约为800 MB。 它主要包含三种类型的标签(我们称之为n,w和r)。 他们有一个名为id的属性,我必须尽快搜索。 删除我不需要的属性可以节省大约30%,也许更多。 优化第二部分的第一部分:是否有任何好的工具(如果可能的话,命令行linux和windows)可以轻松删除某些标签中未使用的属性? 我知道可以使用XSLT。 或者有任何简单的替代方案吗? 此外,我可以将它分成三个文件,每个标签一个文件以获得速度以便以后解析…速度对于这种数据准备来说并不重要,当然,当花费相当于几分钟而不是几小时时,它会很好。 第二部分:一旦我准备好数据,无论是否缩短,我都应该能够搜索我提到的ID属性,这对时间要求很高。 使用wc -l估计告诉我,有大约3M N标签和大约418K W标签。 后者最多可包含大约20个子标签。 W-Tags也包含一些,但它们会被剥离。 “我所要做的就是”在包含某些id属性的标签之间导航。 有些标签引用了其他id,因此给了我一棵树,甚至可能是图表。 原始数据很大(如上所述),但结果集不应该太大,因为我只需挑选出某些元素。 现在的问题是:我应该使用哪种XML解析库进行这种处理? 我会首先使用Java 6,并考虑将其移植到BlackBerry。 创建一个索引id并指向文件中偏移量的平面文件可能有用吗? 是否有必要进行上部提到的优化? 或者已知解析器与原始数据一样快? 小注意:为了测试,我将id放在文件的最后一行,并使用grep搜索id。 在Core 2 Duo上花了大约一分钟。 如果文件变得更大,会发生什么呢?比方说5 GB? 我感谢任何通知或建议。 非常感谢大家提前和问候

如何使用任何循环为多个输入指定输入目录?

public class MultiXslt { public static void main(String[] args) throws TransformerException,ParserConfigurationException, SAXException, IOException { //source xslt StreamSource stylesource = new StreamSource(“C:/Users/santhanamk/Desktop/newxslt/Xslt inputs/Idml0.xsl”); DocumentBuilderFactory docbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder = docbFactory.newDocumentBuilder(); //source XML Document sourceDoc = dBuilder.parse(“C:/Users/santhanamk/Desktop/newxslt/input.xml”); DOMSource source = new DOMSource(sourceDoc); TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory .newTransformer(stylesource); Document document = […]