我發佈一個服務器上的一些CSV輸入文件的XML文件所需要的數據,它給了我一個XML文件,它看起來像這樣:檢索從具有相同名稱的標籤
<ns0:TransportationEvent xmlns:ns0="http://www.server.com/schemas/TransportationEvent.xsd">
<ns0:deviceId>4567289456</ns0:deviceId>
.....
.....
</ns0:TransportationEvent>
<ns0:TransportationEvent xmlns:ns0="http://www.server.com/schemas/TransportationEvent.xsd">
<ns0:deviceId>7965145741</ns0:deviceId>
.....
.....
</ns0:TransportationEvent>
<ns0:TransportationEvent xmlns:ns0="http://www.server.com/schemas/TransportationEvent.xsd">
<ns0:deviceId>2168744654</ns0:deviceId>
.....
.....
</ns0:TransportationEvent>
的TransportationEvent標籤將被添加一次又一次地更新deviceId。
我從該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:deviceId/text()";
String deviceId = xpath.evaluate(strXpath, doc);
上面的代碼給出作爲 DEVICEID的值。基本上它總是取自第一個標記的值。
我需要從挑選數據「TransportationEvent」標籤裏的「DEVICEID」等於我選擇的設備ID。事情是這樣的:
String strXpath = "//ns0:TransportationEvent[where ns0:deviceId = " + myDeviceId + "]/ns0:deviceId/text()";
我可以通過使用節點列表類執行此,並且可以通過所有的「TransportationEvent」標籤迭代,但隨後我就不能使用XPath或NamespaceContext實施。我發現NodeList類和NamespaceContext類或Xpath類之間沒有連接。
我想要得到的CTX具有所需TransportationEvent標籤的背景值。
我知道我錯過了一些東西。請有人幫忙嗎?
偉大的答案。有什麼方法可以用兩個字段過濾所需的** TransportationEvent **。其中一個字段是_ns0:deviceId_,您已經顯示了該字段,另外還有一個字段,例如_ns0:stopNumber_。 如何添加一個字段(_ns0:stopNumber_)用於在此行中篩選: ** XPathExpression devex = xpath.compile(「// ns0:deviceId [text()='7965145741']/parent :: node )「); ** – Abhinav