【发布时间】:2017-04-25 15:09:42
【问题描述】:
我在服务器上发布了一些 csv 输入文件,它给了我一个如下所示的 xml 文件:
<ns0:TransportationEvent xmlns:ns0="http://www.server.com/schemas/TransportationEvent.xsd">
<ns0:creationDateTime>2017-04-06</ns0:creationDateTime>
.....
.....
</ns0:TransportationEvent>
<ns0:TransportationEvent xmlns:ns0="http://www.fedex.com/schemas/TransportationEvent.xsd">
<ns0:creationDateTime>2017-04-25</ns0:creationDateTime>
.....
.....
</ns0:TransportationEvent>
TransportationEvent 标记将一次又一次地添加,其中包含更新日期。
我正在使用 XpathFactory 类和 NamespaceContext 类从这个 xml 中检索数据,如下所示:
NamespaceContext ctx = new NamespaceContext() {
public String getNamespaceURI(String prefix) {
String uri;
if (prefix.equals("ns0"))
uri = "http://www.server.com/schemas/TransportationEvent.xsd";
else
uri = null;
return uri;
}
public Iterator getPrefixes(String val) {
return null;
}
// Dummy implementation - not used!
public String getPrefix(String uri) {
return null;
}
};
XPathFactory xpathFact = XPathFactory.newInstance();
XPath xpath = xpathFact.newXPath();
xpath.setNamespaceContext(ctx);
String strXpath = "//ns0:TransportationEvent/ns0:creationDateTime/text()";
String creationDateTime = xpath.evaluate(strXpath, doc);
以上代码将 creationDateTime 的值设为 2017-04-06。基本上它总是从第一个 TransportationEvent 标签中获取值。
我需要从“creationDateTime”等于今天的日期的“TransportationEvent”标签中挑选数据。
我可以通过使用 NodeList 类来执行此操作,并且可以遍历所有“TransportationEvent”标签,但是我将无法使用 Xpath 或 NamespaceContext 实现。我发现 NodeList 类和 NamespaceContext 类或 Xpath 类之间没有任何联系。
我想获取 ctx 的值,它具有最新的 TransportationEvent 标签的上下文。
我知道我错过了一些东西。有人可以帮忙吗?
【问题讨论】:
标签: java xpath xml-parsing