在 VTD-XML 中使用 AutoPilot 时 XPath 评估失败
XPath Evaluation fails while using with AutoPilot in VTD-XML
我有一堆 xml,其中包含带有命名空间的元素,我正在使用 VTD-XML 来解析 xml。但是当我尝试使用 xpath 获取命名空间元素时。它根本不会取吗?
这是 xml 示例
<startQuery logLinkID="797ca6afb7a32458:1619f4f5:14d8fa72127:-7ff5" modelName="SampleModel" tracerString="tracer:: std.Page1.Pane1">
<xql:XQL xmlns:xql="someNameSpace" cellCountThreshold="1000000" dumpOptions="" enableThresholdDrillDown="false" maxOverridenValueArraySize="" returnFullPath="true" returnNormalizedXql="true">
<HiddenValues errors="true" nulls="false" zeros="false" />
<CellAttributes cellsAsAttachment="true" editUEVInfo="false" formattingInfo="false" uevInfo="false" writeBackInfo="true" /></xql:XQL>
</startQuery>
但是当我将 xpath 用作
AutoPilot ap = new AutoPilot(nav);
ap.selectXPath("//HiddenValues");
它工作正常,但是,当我使用这个 xpath
ap.selectXPath("//XQL");
它不会起作用。
请帮助我如何在评估 XPath 时忽略名称空间?
我不知道 VTD-XML,但看起来您需要声明元素的命名空间 XQL
。所以在 http://vtd-xml.sourceforge.net/javadoc/com/ximpleware/AutoPilot.html 的快速 loko 之后,我会说:
AutoPilot ap = new AutoPilot(nav);
ap.declareXPathNameSpace("xql", "someNameSpace");
ap.selectXPath("//xql:XQL");
或者如果你想避免后代轴:
AutoPilot ap = new AutoPilot(nav);
ap.declareXPathNameSpace("xql", "someNameSpace");
ap.selectXPath("/startQuery/xql:XQL");
额外提示:if startQuery
was 在另一个命名空间中,只需声明几个前缀(它们不必匹配使用输入中的前缀,它们必须匹配的 URI):
AutoPilot ap = new AutoPilot(nav);
ap.declareXPathNameSpace("h", "urn:hypotheticalNamespace");
ap.declareXPathNameSpace("xql", "someNameSpace");
ap.selectXPath("/h:startQuery/xql:XQL");
注:未测试。
我有一堆 xml,其中包含带有命名空间的元素,我正在使用 VTD-XML 来解析 xml。但是当我尝试使用 xpath 获取命名空间元素时。它根本不会取吗? 这是 xml 示例
<startQuery logLinkID="797ca6afb7a32458:1619f4f5:14d8fa72127:-7ff5" modelName="SampleModel" tracerString="tracer:: std.Page1.Pane1">
<xql:XQL xmlns:xql="someNameSpace" cellCountThreshold="1000000" dumpOptions="" enableThresholdDrillDown="false" maxOverridenValueArraySize="" returnFullPath="true" returnNormalizedXql="true">
<HiddenValues errors="true" nulls="false" zeros="false" />
<CellAttributes cellsAsAttachment="true" editUEVInfo="false" formattingInfo="false" uevInfo="false" writeBackInfo="true" /></xql:XQL>
</startQuery>
但是当我将 xpath 用作
AutoPilot ap = new AutoPilot(nav);
ap.selectXPath("//HiddenValues");
它工作正常,但是,当我使用这个 xpath
ap.selectXPath("//XQL");
它不会起作用。
请帮助我如何在评估 XPath 时忽略名称空间?
我不知道 VTD-XML,但看起来您需要声明元素的命名空间 XQL
。所以在 http://vtd-xml.sourceforge.net/javadoc/com/ximpleware/AutoPilot.html 的快速 loko 之后,我会说:
AutoPilot ap = new AutoPilot(nav);
ap.declareXPathNameSpace("xql", "someNameSpace");
ap.selectXPath("//xql:XQL");
或者如果你想避免后代轴:
AutoPilot ap = new AutoPilot(nav);
ap.declareXPathNameSpace("xql", "someNameSpace");
ap.selectXPath("/startQuery/xql:XQL");
额外提示:if startQuery
was 在另一个命名空间中,只需声明几个前缀(它们不必匹配使用输入中的前缀,它们必须匹配的 URI):
AutoPilot ap = new AutoPilot(nav);
ap.declareXPathNameSpace("h", "urn:hypotheticalNamespace");
ap.declareXPathNameSpace("xql", "someNameSpace");
ap.selectXPath("/h:startQuery/xql:XQL");
注:未测试。