我正在尝试使用Saxon以编程方式生成XSLT。这是一个与Create xslt files programmatically类似的问题,但由于我再次提出这个问题没有可接受的答案,特别是撒克逊人在某一点上声称支持这一点。
根据http://saxon.sourceforge.net/saxon7.0/api-guide.html,"本文档描述了如何将Saxon用作Java类库,而不使用任何XSLT样式表。"
(回答我上面提到的另一个问题),然后将其序列化为一个样式表,然后可以重新加载并执行,但我已经发现它不会发生。
如果Saxon不是答案,那么Java库将支持哪些?
顺便说一句,使用.Net做任何和所有这些都是微不足道的。不幸的是,我需要一个Java解决方案。
非常感谢任何帮助。
答案 0 :(得分:1)
嗯,首先,自7.0版以来,Saxon已经发布了26个主要版本和无数维护版本,所以忘掉你在那里读到的任何内容。
从您的问题中不清楚是否要用Java或XSLT编写XSLT代码生成器。我不明白你为什么要用Java而不是XSLT来做这件事,但两者都不难。您的问题的主要问题是您没有解释为什么您认为这是一个问题。生成XSLT样式表就像生成任何其他XML文档一样:问题是什么?
答案 1 :(得分:0)
我刚才想到这一点,并认为我会分享我的答案。这可能也可能是Create xslt files programmatically的答案,但由于这不是我的问题,我不会假设。
答案是根本不使用XSLT(或Saxon)。最初我想要一个用于生成XSLT模型的API,其中以编程方式知道转换特定(xml)树结构的规则。然后,模型可以作为样式表持久化,以便可以重新加载并用于再次转换具有相同结构的另一棵树。当然,我可以以编程方式创建一个包含XSLT样式表文档的DOM,但为什么我想要?它的效率低下 - 使用所有XSLT语法创建和保存DOM(繁琐),然后使用SAXON等读取它。我宁愿拥有一个原生理解XSLT的API - 可能是一个一个XSLT模型,可以编程然后序列化?
无论如何,我的问题的答案就是使用SAX。由于我以编程方式知道树的特定转换规则,因此我只是创建了一个使用规则处理流的处理程序,并且我完成了。最后,没有可以在程序之外生活的XSLT样式表,但我会接受它。
我收回了我所说的.Net支持我的第一种方法。我认为这样做只是提醒您在发布前检查您的假设。
顺便说一下,我的问题的答案表明它很容易实现,而不是概述如何做到这一点,我只是质疑我为什么要这样做。如果我们还觉得我们需要问某人他们为什么问一个问题,我们至少可以尝试回答一个问题吗?