Java XmlObject.execQuery处理OuterXml而不是InnerXml
我试图在XML文件上运行一些Xquery,但每次调用xmlObject.execQuery()时,它都会遍历OutterXml,而不是InnerXml。让我解释一下,我有以下XML:Java XmlObject.execQuery处理OuterXml而不是InnerXml,java,xml,xmlbeans,Java,Xml,Xmlbeans,我试图在XML文件上运行一些Xquery,但每次调用xmlObject.execQuery()时,它都会遍历OutterXml,而不是InnerXml。让我解释一下,我有以下XML: <test><MyXml><someValues><MoreNodes>Value1</MoreNodes></someValues></MyXml></test> Value1 这是我的代码: XmlObject
<test><MyXml><someValues><MoreNodes>Value1</MoreNodes></someValues></MyXml></test>
Value1
这是我的代码:
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);
XmlObject inputXml=XmlObject.Factory.parse(xmlFileContent)。选择children(新QName(“测试”))[0];
put(“var1”,inputXml);
options.setXqueryVariables(paramMap);
XmlObject[]resultsObjects=XmlObject.execQuery(“将变量$var1声明为元素()外部;{$var1/someValues/MoreNodes}”,选项);
但这会返回
如果我将XQuery更改为
declare variable $var1 as element() external; <a>{$var1/MyXml/someValues/MoreNodes}</a>
将变量$var1声明为元素()外部;{$var1/MyXml/someValues/MoreNodes}
然后我得到了我期望的结果:Value1
这些只是我正在做的测试,但实际上XQuery将从OSB上编译和运行的文件中读取,因此我无法更改XQuery内容以使用正确的XPath
你知道怎么解决我的问题吗
顺便说一句,如果我删除了代码
。请选择children(新的QName(“test”))[0]
然后xmlObject.execQuery
失败。多次尝试后,我发现我可以执行以下操作:
<MyXml><someValues><MoreNodes>Value1</MoreNodes></someValues></MyXml>
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);
Value1
*无需插入我之前插入的父节点
然后做一些类似的事情:
<MyXml><someValues><MoreNodes>Value1</MoreNodes></someValues></MyXml>
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);
XmlObject inputXml=XmlObject.Factory.parse(xmlFileContent)。选择children(新QName(“MyXml”))[0];
put(“var1”,inputXml);
options.setXqueryVariables(paramMap);
XmlObject[]resultsObjects=XmlObject.execQuery(“将变量$var1声明为元素()外部;{$var1/someValues/MoreNodes}”,选项);
通过这两个变化,我得到了我想要的:
<a><MoreNodes>Value1</MoreNodes></a>
Value1
希望这能帮助我遇到同样问题的人。关于如何使用这些类,没有太多文档
谢谢