我正在尝试在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上编译和运行的文件中读取,因此我无法更改XQueries内容以使用正确的XPath。
关于如何解决我的问题的任何想法?
顺便说一句,如果我删除代码.selectChildren(new QName("test"))[0];
,则xmlObject.execQuery
会失败。
答案 0 :(得分: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>
希望这有助于遇到与我面临同样问题的人。关于如何使用此类的文档并不多。
感谢。