Xml 哪个XSLT处理器同时支持XSLT2.0和StatxSource?
我花了很多时间试图找到一个Xml 哪个XSLT处理器同时支持XSLT2.0和StatxSource?,xml,xslt,saxon,stax,Xml,Xslt,Saxon,Stax,我花了很多时间试图找到一个TransformerFactory来支持StatxSource,因为我的输入是XMLStreamReader,而StatxSource似乎是最合适的。最终,我遇到了以下问题,并且成功了: TransformerFactory.newInstance( "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl", null); 现在我发现自己尝试使用以下分组,并成功地为每个组使用了
TransformerFactory
来支持StatxSource
,因为我的输入是XMLStreamReader
,而StatxSource
似乎是最合适的。最终,我遇到了以下问题,并且成功了:
TransformerFactory.newInstance(
"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl",
null);
现在我发现自己尝试使用以下分组,并成功地为每个组使用了xsl:for
()。然后我发现上面的TransformerFactory
不支持XSLT2.0,并且我不知道如何应用Muenchian分组(我希望将输入转换为输出)
我希望能够支持XSLT2.0,因此我放弃了与门钦分组斗争的概念。我发现SAXON支持XSLT2.0
TransformerFactory factory = TransformerFactory.newInstance(
"net.sf.saxon.TransformerFactoryImpl",
null);
唉,它不支持statxsource
。是否有支持XSLT 2.0和statxsource
的XSLT处理器
作为替代方案,是否有一种方法可以将XMLStreamReader转换为SAXON可以支持的东西(例如StringReader
forStreamSource
)
最后一种方法是找出这个Muenchian分组并将XSLT 2.0完全打折,但我不喜欢这个想法。事实证明,在我提出这个问题后不久,我找到了解决方案: SAXON非常棒,实际上支持从
XMLStreamReader
读取,只是不使用StatxSource
。我发现了一个例子,它解释了为什么statxsource
在没有得到广泛支持的情况下仍然存在,并提供了一个可行的替代方案
因此,与其使用:
Source source = new StAXSource(xmlStreamReader);
我使用了以下方法:
StaxBridge bridge = new StaxBridge();
bridge.setXMLStreamReader(reader);
Source source = new PullSource(bridge);
我有一个XSLT处理器,可以与
XMLStreamReader
一起工作,支持XSLT 1.0和2.0。您还没有说您使用的是哪个版本的Saxon。9.5的单元测试演示了使用StatxSource的成功操作——我刚刚检查过。这在内部有点棘手,因为StaxSource在JDK1.5中不可用,代码必须在1.5中运行,所以它使用反射;但它应该会起作用。这是一个很好的观点。我一直在部署WSO2ESB4.8.1,所以我当时还不知道。我四处寻找,发现了一个Saxon9he.jar
。现在还不清楚是哪一个小版本,但是,当我尝试使用StatxSource时,看到它会呕吐,我想冒昧地猜测一下,它不是9.5。不过,您对JDK1.5的看法很有趣。我使用的是JDK1.7,恢复不是一个选项。好消息是,基于您对Nabble的一个回复,PullSource同样有效,所以这不是一个大问题。谢谢您可以通过命令行上的-t找到您正在使用的版本,或者执行“java-cp saxon9he.jar net.sf.saxon.version”。谢谢Michael。我正在使用“SAXON 9.4.0.4 from Saxonica(build 062515)”。然后我建议继续前进。