当前位置: 首页 > 知识库问答 >
问题:

Saxon-HE集成扩展函数

石超
2023-03-14

我最初应该发布我的问题,说明我们的代码使用了一个嵌入式撒克逊扩展函数——撒克逊:解析($xml),它返回xml的根元素/节点。然而,在Saxon-HE中,该扩展不再可用——所以我试图编写一个集成扩展,将xml字符串解析到文档中并返回根元素。

我使用的是Saxon HE 9.5.1.6——我试图编写一个集成的扩展函数,返回文档的根节点。该函数接收一个xml字符串——创建一个文档,并需要将根节点返回给xslt,然后使用xpath查找特定元素。ExtensionFunctionCall类/类型的call()方法返回一个序列类型——如何返回NodeSequence或NodeType?如何从文档构造节点序列?

我可以分步调试并确认函数收到了正确的xml——将其解析为文档,但到目前为止,我无法确定如何使用RootElement构造NodeSequence。

我还有其他返回StringValue的集成扩展函数,这些函数工作得很好,但我无法从可用的类方法中了解如何从ExtensionFunctionCall返回简单(numerica/alpha/item)类型之外的任何其他类型

谢谢你。

共有2个答案

锺玺
2023-03-14

对于任何阅读本文的人——在迈克尔·凯的帮助下,我能够实现这一点——我的解决方案如下:

Source source = new StreamSource(new StringReader(myXMLparam));
DocumentInfo docInfo = context.getConfiguration().buildDocument(source);
return docInfo;
云浩然
2023-03-14

DocumentInfo类实现了序列,因此如果返回DocumentInfo,将满足接口的要求。您可以使用

context.getConfiguration().buildDocument()

如果您想使用一些外部对象模型(如DOM或JDOM2)构建文档,您需要获取该外部文档的根节点,并将其包装在适当类型的Saxon DocumentWrapper中,使其成为DocumentInfo。

 类似资料:
  • 我目前使用Saxon9开源版本,扩展用Java编写。我正在尝试迁移到SaxonHE,我已经阅读了这里显示的留档和示例。 Java扩展功能:全界面 和 Saxon配置文件 当我尝试执行我的XSLT转换时,当它遇到我的一个外部java函数时,我会遇到这样的错误。 这就是我到目前为止所做的。 我的java扩展函数是这样写的。 我已经创建了一个撒克逊配置文件,看起来像这样。我的例子看起来有点不同于撒克逊网

  • 当我运行我的xsl样式表时,我需要知道是否存在一些文件。因为xslt没有本地方法来测试文件是否存在(ASFAIK),所以我想用javascript来做这件事。通常我使用saxon 9 HE,但是一些同事告诉我HE版本不支持javascript函数。有没有一种方法可以用saxon 9 HE执行java脚本函数? 我尝试过这个例子:如何在xslt中包含javaScript文件,但oxygen给了我一个

  • 我需要使用xquery解码转义的XML,也就是说,我有一个类似

  • 在针对PHPCMS V9做二次开发的时候,您可以自定义一些全局函数且不影响以后官方升级 您自定义的文件请放置于该文件中 phpcms\libs\functions\extention.func.php或者以.func.php格式命名,放置于如下目录中 phpcms\libs\functions\autoload

  • Kubernetes是一个高度开放可扩展的架构,可以通过自定义资源类型CRD来定义自己的类型,还可以自己来扩展API服务,用户的使用方式跟Kubernetes的原生对象无异。

  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // He