【发布时间】:2014-11-04 18:21:48
【问题描述】:
我最初应该通过说明我们的代码使用嵌入式 saxon 扩展函数 - saxon:parse($xml) 来发布我的问题,它返回 xml 的根元素/节点。但是,在 Saxon-HE 中,该扩展不再可用 - 所以我正在尝试编写一个集成扩展,将 xml 字符串解析为文档并返回根元素。
我正在使用 Saxon-HE 9.5.1.6 - 我正在尝试编写一个返回文档根节点的集成扩展函数。该函数接收一个 xml 字符串 - 创建一个文档并需要将根节点返回到 xslt 以便它使用 xpath 查找特定元素。 ExtensionFunctionCall 类/类型的 call() 方法返回一个序列类型 - 我如何返回一个 NodeSequence 或 NodeType?如何从我的 Document 构造 NodeSequence?
我可以单步调试并确认函数接收到正确的 xml - 将其解析为文档,但到目前为止我无法确定如何使用我的 RootElement 构造 NodeSequence。
我还有其他返回 StringValue 的集成扩展函数——它们工作得很好,但我无法从可用的类方法中收集到如何从 ExtensionFunctionCall 返回除简单(数字/阿尔法/项目)类型以外的任何内容
谢谢。
【问题讨论】:
-
你能告诉我们(相关部分)你的代码吗?
-
私有静态类 SurveyParseCall 扩展 ExtensionFunctionCall{
-
私有静态类 SurveyParseCall 扩展 ExtensionFunctionCall{ @Override public Sequence call(XPathContext context, Sequence[] arguments)throw XPathException{ Sequence seq = arguments[0];字符串 xml = ((StringValue)seq.head()).getStringValue(); DocumentBuilderFactory = DocumentBuilderFactory.newInstance(); //下面是一个尝试捕获 - 这里省略 DocumentBuilder builder = factory.newDocumentBuilder; Document document = builder.parse(new InputSource(new StringReader(xml))); //这里需要返回document.getDocumentElement();
-
与其在 cmets 中发布代码(不保留格式),不如编辑原始问题并在其中添加代码。您可以随时编辑自己的帖子,并在积累更多声望点后可以编辑其他人的帖子。
-
这里要注意的主要一点是,如果你只想解析词法XML返回一个文档树,那么使用Saxon的树实现比使用DOM快10倍。 (该函数也可用作 saxon:parse() 或 fn:parse-xml(),但遗憾的是在 Saxon-HE 中没有。)