0

我试图在 XML 文件上运行一些 Xquery,但每次我调用 xmlObject.execQuery() 时,它都会通过 OutterXml 而不是 InnerXml。让我解释一下,我有这个 XML:

<test><MyXml><someValues><MoreNodes>Value1</MoreNodes></someValues></MyXml></test>

这是我的代码:

XmlObject inputXml = XmlObject.Factory.parse(xmlFileContent).selectChildren(new QName("test"))[0];
    paramMap.put("var1", inputXml);

    options.setXqueryVariables(paramMap);

    XmlObject[] resultsObjects = xmlObject.execQuery("declare variable $var1 as element() external; <a>{$var1/someValues/MoreNodes}</a>", options);

但这会返回<a/>

如果我将 XQuery 更改为

declare variable $var1 as element() external; <a>{$var1/MyXml/someValues/MoreNodes}</a>

然后我得到了我期望的结果:<a><MoreNodes>Value1</MoreNodes></a>

这些只是我正在做的测试,但实际上 XQuery 将从在 OSB 上编译和运行的文件中读取,因此我无法更改 XQuery 内容以使用正确的 XPath。

关于如何解决我的问题的任何想法?

顺便说一句,如果我删除代码.selectChildren(new QName("test"))[0];然后xmlObject.execQuery失败。

4

1 回答 1

0

经过多次尝试后,我发现我可以执行以下操作:

<MyXml><someValues><MoreNodes>Value1</MoreNodes></someValues></MyXml>

*无需插入<test>我之前插入的父节点。

然后执行以下操作:

XmlObject inputXml = XmlObject.Factory.parse(xmlFileContent).selectChildren(new QName("MyXml"))[0];
paramMap.put("var1", inputXml);

options.setXqueryVariables(paramMap);

XmlObject[] resultsObjects = xmlObject.execQuery("declare variable $var1 as element() external; <a>{$var1/someValues/MoreNodes}</a>", options);

通过这两个更改,我得到了我想要的东西:

<a><MoreNodes>Value1</MoreNodes></a>

希望这可以帮助遇到与我遇到相同问题的人。关于如何使用这些类的文档并不多。

谢谢。

于 2013-09-10T21:09:54.357 回答