首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用s9api XQuery变换获取xml转换中的元素节点

如何利用s9api XQuery变换获取xml转换中的元素节点
EN

Stack Overflow用户
提问于 2019-06-14 10:40:22
回答 1查看 339关注 0票数 0

我正在使用saxon s9api来用XQuery转换xml。有了下面的代码,这是可能的,但我得到了XPathException。

XQueryEvaluator期望元素节点,但我不知道如何从文档节点获取元素。

我试图迭代和传递文档的子文档。

代码语言:javascript
复制
// first java class
Processor processor = new Processor(false);
DocumentBuilder db = processor.newDocumentBuilder();
XdmNode doc = db.build(new StreamSource(new 
StringReader(innerResponse.getBody())));

// second java class where new processor is created.
XQueryCompiler compiler = processor.newXQueryCompiler();
XQueryExecutable executable = 
compiler.compile(getXQueryFileAsString(interfaceId));
XQueryEvaluator query = executable.load();

query.setExternalVariable(new QName("result1"), ((XdmNode) doc));
XdmValue nodes = query.evaluate();


// XQuery
(:: pragma bea:global-element-parameter parameter="$result1" element="result" location="../XMLSchemas/myxsd.xsd" ::)
(:: pragma bea:global-element-return element="result" location="../XMLSchemas/anotherxsd.xsd" ::)

declare namespace xf = "http://tempuri.org/somepath/XQueries/Result/";

declare function xf:Result($result1 as element(result),

// input xml
<?xml version='1.0' encoding='UTF-8'?>
<result>
        <code>OK</code>
        <somedata>
        ..
        </somedata>
</result>

例外:

XPTY0004:变量$result1值的必需项类型是元素(q{}$result1);提供的值doc()不匹配。提供的值是一个文档节点net.sf.saxon.s9api.SaxonApiException:变量$result1值的所需项类型是元素(q{}$result1);所提供的值doc()不匹配。提供的值是net.sf.saxon.s9api.XQueryEvaluator.evaluate(XQueryEvaluator.java:430)上的一个文档节点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 13:24:42

假设result元素是文档的最外层元素,并且您使用的是Saxon9.9,那么请使用

代码语言:javascript
复制
doc.select(child("result")).asNode();

以获得result元素。

您将需要

代码语言:javascript
复制
import static net.sf.saxon.s9api.streams.Steps.child;

访问child()方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56596490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档