XmlObject.execQuery在OuterXml而不是InnerXml上工作

时间:2013-09-05 19:27:49

标签: java xml xmlbeans

我正在尝试在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会失败。

1 个答案:

答案 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>

希望这有助于遇到与我面临同样问题的人。关于如何使用此类的文档并不多。

感谢。