Tag: xslt

无法从Saxon XSLT处理器访问更新的Java对象

我正在使用Saxon XSLT处理器的开源版本“来自Saxonica的Saxon 9.0.0.2J”,并且我第一次尝试使用java可扩展性。 我遇到了一个问题,我怀疑这可能是对开源版本的限制,但是想先检查一下我是否会遗漏这些东西。 从下面的代码片段中,我的结果是$ c1的最终值不会因为调用greg而变化:setTime() – 即Saxon中的$ c1变量似乎是从底层Java对象取消的,并且没有明显的方法来访问setTime()调用更新的对象。 请注意,代码段中的所有代码都经过测试并正常工作 – 即$ c1通过getInstance()调用正确实例化,$ startdate具有正确的格式,并且$ d1已正确实例化。 思考? ….

XML中的不需要的元素通过XSTREAM

我是XStream的新手 我跟随DTO @XStreamAlias(“outline”) public class OutlineItem implements java.io.Serializable { private static final long serialVersionUID = -2321669186524783800L; @XStreamAlias(“text”) @XStreamAsAttribute private String text; @XStreamAlias(“removeMe”) private List childItems; } 我曾经做过 XStream stream = new XStream(); stream.processAnnotations(OutlineItem.class); stream.toXML(outlineItem); 我得到这个作为我的输出文本 而我希望输出为: 任何帮助将不胜感激! 不确定是否需要某种XSLT …… 沙阿

如何强制javax xslt转换器使用utf-8编码国家字符而不是html实体?

我正在研究filter,它应该使用一些样式表来转换输出。 代码的重要部分如下所示: PrintWriter out = response.getWriter(); … StringReader sr = new StringReader(content); Source xmlSource = new StreamSource(sr, requestSystemId); transformer.setOutputProperty(OutputKeys.ENCODING, “UTF-8”); transformer.setParameter(“encoding”, “UTF-8”); //same result when using ByteArrayOutputStream xo = new java.io.ByteArrayOutputStream(); StringWriter xo = new StringWriter(); StreamResult result = new StreamResult(xo); transformer.transform(xmlSource, result); out.write(xo.toString()); 问题是国家字符被编码为html实体而不是使用UTF。 有没有办法强制变压器使用UTF-8而不是实体?

XALAN寄存器扩展function,如SAXON

我想用XALAN通过XSLT转换XML。 现在我想使用扩展函数,这个函数必须像在SAXON中一样添加到JAVA源代码中: 方法: TransformerFactory tFactory = TransformerFactory.newInstance(); Configuration c = ((net.sf.saxon.TransformerFactoryImpl) tFactory).getConfiguration(); c.registerExtensionFunction(new FooExtension()); FooExtension: public class FooExtension extends ExtensionFunctionDefinition { private static final long serialVersionUID = -8143237239412146617L; @Override public SequenceType[] getArgumentTypes() { return new SequenceType[] { SequenceType.EMPTY_SEQUENCE }; } @Override public StructuredQName getFunctionQName() { return new StructuredQName(“ns”, “http://namespace”, “generate-guid”); } } 但是它如何在XALAN中工作(?FunctionTable?,?FunctionResolver?,?URIResolver?),我必须通过源代码完成,我不允许在XSLT中添加类。 谢谢!!

XSLT处理大量XML文件(差不多5 GB)

我试图找到一个使用XSLT来转换大型XML文件的一致解决方案(几乎5 GB) Hier是我迄今为止所尝试过的: 从命令行使用MSXML Parser 4.0(SP3): > msxsl.exe myfile.xml mysheet.xslt -o output.xml 内存不足(代码:0x8007000e),文件大于800MB。 使用Mozilla Firefox或IE通过处理指令应用XSLT: … 浏览器在几分钟后崩溃。 尝试在Windows上用PHP(Ver 5.4.22)编写自己的XML-Reader,并选择XPath所需的元素 <?PHP ini_set(’max_execution_time’,0); ini_set(’memory_limit’,’ – 1’); $ xml = simplexml_load_file(’myfile.xml’); foreach($ xml-> xpath(’/ root / node / atribute [@ id =“value”]’)as $ result){ … …… } …… …… Apache服务器崩溃了。 请告诉您在这方面的经历……用Java编写课程怎么样? PS我不想使用像XmlSplit之类的软件!

如何使用JAXB删除XML中的标记

我正在使用JAXB将java对象转换为xml文件。 在我的XML文件中,我需要删除标记 不使用XSLT。 例如:删除标签订单 12324 例外结果: 12324

JSP – TransformerFactory.newInstance()。newTransformer(xsl)返回null?

java API保证它永远不会返回null – 但对我来说,它是! http://download.oracle.com/javase/6/docs/api/javax/xml/transform/TransformerFactory.html#newTransformer(javax.xml.transform.Source ) 相关代码: xml = new StreamSource(new URL(mondialURL).openStream()); xsl = new StreamSource(new File(“/REMOVED/countriesnofilter.xsl”)); result = new StreamResult(new PrintWriter(out)); transformer = TransformerFactory.newInstance().newTransformer(xsl); transformer.transform(xml, result); 由于xml,xsl和result是使用new创建的,因此它们必须包含非null,因此它必须是变换器才变为null。 为什么会发生这种情况,我该如何解决? 抛出这个: org.apache.jasper.JasperException:JSP中的exception:/dca/ass2/a.jsp:46 43: result = new StreamResult(new PrintWriter(out)); 44: 45: transformer = TransformerFactory.newInstance().newTransformer(xsl); 46: transformer.transform(xml, result); 47: 48: %> 49: Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) […]

TransformerFactory – 避免网络查找以validationDTD

我需要为XML文档的离线转换编程。 在使用以下内容加载原始XML文件时,我能够停止DTD网络查找: DocumentBuilderFactory factory; factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false); factory.setNamespaceAware(true); factory.setFeature(“http://xml.org/sax/features/namespaces”, false); factory.setFeature(“http://xml.org/sax/features/validation”, false); factory.setFeature(“http://apache.org/xml/features/nonvalidating/load-dtd-grammar”, false); factory.setFeature(“http://apache.org/xml/features/nonvalidating/load-external-dtd”, false); // open up the xml document docbuilder = factory.newDocumentBuilder(); doc = docbuilder.parse(new FileInputStream(m_strFilePath)); 但是,我无法将其应用于TransformerFactory对象。 DTD在本地可用,但我不知道如何指示变换器查看本地文件而不是尝试进行网络查找。 从我所看到的,变压器需要这些文件来正确地进行转换。 有关信息,我正在将MusicXML文档从Partwise转换为Timewise。 正如您可能已经猜到的那样,XSLT不是我的强项(远非如此)。 我是否需要修改XSLT文件以引用本地文件,还是可以采用不同的方式? 继续下面的评论,这里是xsl文件的摘录。 这是我看到的唯一一个引用外部文件的地方: 上述技术对此也有效吗? DTD文件包含对许多MOD文件的引用,如下所示: 我认为这些文件也将依次导入。

使用java XSLT Extensions的数组

我正在尝试使用java在XSLT Extensions中使用数组。 我收到以下错误: Caused by: java.lang.ClassCastException: org.apache.xpath.objects.XObject cannot be cast to org.apache.xpath.objects.XNodeSet. 我使用数组的方式是。 扩展类方法 public static String[] getEvents(String contractIdStr,String tradeIdStr) { return new String[]{“MacroType”,”Type”,”SubType”}; } 在XSL内部, 我正在使用XALAN Parse。

使用XSLT和Java替换XML节点文本?

XML文件 – 2009-1 3-11-2011 2:55:0 Book XXX 2009-2 3-12-2011 2:55:0 Song XXX 我想替换特定的文本。 例如; 对于Cid 2009-1,我想更新/更改相应的评论XXX到YYY。 这两个值都基于我的java代码将传递的参数。 以下是XSLT文件 – 这是Java代码的一部分 – String cid = “2009-1”; String comm = “YYY”; TransformerFactory factory = TransformerFactory.newInstance(); Source xslt = new StreamSource(new File(“loc1.xslt”)); Transformer transformer = factory.newTransformer(xslt); transformer.setParameter(“ciName”,cid); transformer.setParameter(“coName”,comm); Source text = new StreamSource(new File(“Comments.xml”)); transformer.transform(text, new StreamResult(new File( […]