最近,我在应用程序中升级了一些JAR。因此,我将Saxon JAR更新为9.9版本。现在我看到了:
DynamicQueryContext.setContextItem()
经历了一些改变。
现在,API文档要求进行调查,
Configuration.buildDocumentTree(javax.xml.transform.Source)
但这甚至不返回Item对象!
这是正确的做法吗?
dynamicQueryContext.setContextItem((getConfiguration().buildDocumentTree(new StreamSource(new ByteArrayInputStream(xmlData.getBytes(StandardCharsets.UTF_8))))).getRootNode());
这是一个古老的休眠代码,老实说,我不是撒克逊专家。只需阅读API文档并尝试解决这个难题即可。至少,Eclipse这样不会显示错误。
答案 0 :(得分:0)
不幸的是,涉及StaticQueryContext和DynamicQueryContext的API混合了供内部使用的方法和供应用程序使用的方法,并且在各个发行版之间都很难保持兼容性,因此在10多年前被s9api API取代事实证明,这是一个更好的设计,更稳定。
您尚未说明要从哪个版本进行迁移,因此我很难确切地知道它何时更改以及为什么更改;但是我看不到9.1和9.9之间的setContextItem()有任何变化。
Configuration.buildDocumentTree(javax.xml.transform.Source)
是一个相对较新的介绍(9.8?)。过去,类似这样的方法返回一个表示文档节点(即Item)的DocumentInfo
,但是这会导致返回根于元素节点的树的函数出现问题,因为无处可放与树整体有关的信息,而不是与树的根节点有关的信息。因此,我们引入了TreeInfo
类来表示树,您可以使用NodeInfo
在树的根部获得TreeInfo.getRootNode()
项。
如果可以的话,转到s9api接口,以后您会发现API的稳定性更高。