0
我發佈一個服務器上的一些CSV輸入文件的,它給了我一個XML文件,它看起來像這樣:獲取值是相同的使用名稱的XPath
<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標籤會一次又一次地添加更新的日期。
我從該XML使用被如下所示的XPathFactory類和NamespaceContext類檢索數據:
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);
上面的代碼給出作爲2017年4月6日creationDateTime的值。基本上它總是取自第一個標記的值。
我需要從挑選數據「TransportationEvent」標籤裏的「creationDateTime」等於今天的日期。
我可以通過使用NodeList類來執行此操作,並且可以遍歷所有「TransportationEvent」標記,但之後我無法使用Xpath或NamespaceContext實現。我發現NodeList類和NamespaceContext類或Xpath類之間沒有連接。
我想要得到的CTX擁有最新的TransportationEvent標籤的背景值。
我知道我錯過了一些東西。請有人幫忙嗎?
這個作品就像我想要的。謝謝。 這是使用Namespacecontext和xpathFactory類解析xml的好方法嗎? 我有他們有巨大的內容的XML文件。使用nodeList和節點會使代碼難於管理。我在這裏嗎? – Abhinav
你是正確的軌道上。使用節點方法瀏覽DOM是完全不可讀的,而XPath非常簡短。 – wero