我正在尝试通过从我的 Java 代码调用 XSLT 来转换 XML。我在将 XML 字符串作为参数传递给 XSLT 时遇到问题。这会导致异常: 从“java.lang.String”到“node-set”的无效转换。
这是调用 XSLT 的方法:
Transformer l_transformer
=TransformerFactory.newInstance().newTransformer(xslt_file_path);
l_transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
l_transformer.setParameter("collateralDoc", param_xmlString);
StringWriter l_writer = new StringWriter();
StringReader l_reader = new StringReader(inputXML);
Source l_in = new StreamSource(l_reader);
Result l_out = new StreamResult(l_writer);
l_transformer.transform(l_in, l_out);
在搜索了一些解决方案之后,我什至尝试从 param XML 字符串创建一个 Document 对象,并将 Document 对象传递给 setParameter 对象。然后我得到了这个异常:
从“com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl”到“node-set”的无效转换。
处理此输入 XML 参数的 XSLT 代码和抛出异常的行:
<xsl:variable name="infoList" select="$paramXML/a/b"/>
我需要作为参数传递的参数 XML 如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a>
<b>
<c>
<d>blah</d>
<e>blah</e>
</c>
<f>
<g>blah</g>
<h>blah</h>
</f>
</b>
</a>
请帮我解决这个问题。
最佳答案
这是一个老问题,但我认为它仍然值得回答。
JDK 的默认实现使用 Xalan-J。早在 2005 年,一个 issue was raised in Jira against Xalan 2.7要求支持传递节点或文档对象。 10年过去了,这个问题仍未得到解决,尽管评论说“很容易做到”。
但是,上述问题表明可以传递 DOM 树。事实上,以下似乎有效:
String doc = "<root>Hello world!</root>";
transformer.setParameter("mydoc", new StreamSource(new StringReader(doc)));
如果由于某种原因您不能切换到功能更强大的 XSLT 处理器,例如 Saxon,您还可以考虑另一个 relative easy workaround ,我引用:
One workaround would be to use the document function inside your stylesheet with a URI of your choosing. Then install a
URIResolveron the Transformer. TheURIResolver.resolvemethod should be implemented to look for that URI and return aDOMSourcelike the one you've described above.
此外,可以覆盖 setParameter 方法以使用 URIResolver 注册一个节点,使其使用正交。
this answer on SO on the same subject 中提供了一些替代解决方法.
关于java - 将 setParameter 与节点集一起使用时,会引发异常 "Invalid conversion from java.lang.String to node-set",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18327121/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www