2014-01-09 398 views
0

要清楚,我的xml及其XPath是動態的,任何事情都可能發生,因此沒有硬編碼的值來解析XPath中的XML值。這是我構建的XML和XPath。從命名空間xpath獲取XML值

String xml = "<soapenv:Envelope xmlns:com=\"http://com\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header/><soapenv:Body><com:addition><com:a>1</com:a><com:b>1</com:b></com:addition></soapenv:Body></soapenv:Envelope>"; 
Document doc = UtilityFunction.createXMLDocument(xml); 
System.out.println("Value "+XPathFactory.newInstance().newXPath().compile("//soapenv:Envelope[1]/soapenv:Body[1]/com:addition[1]/com:a[1]").evaluate(doc).toString()); 

空的正在打印。我如何使用命名空間從xpath獲取XML值。如何在編譯中啓用命名空間。

+1

[如何檢索XML的可能重複使用包含Java中名稱空間的XPath的數據?](http://stackoverflow.com/questions/8221652/how-to-retrieve-xml-data-using-xpath-which-contains-namespace-in-java) – aalku

+0

庫XPathFactory屬於哪個?是JDOM2嗎? – akhikhl

+0

javax.xml.xpath.XPathFactory工廠 –

回答

0

XPathFactory.newXPath()返回一個XPath對象。

創建一個NamespaceContext對象,將其設置爲了解您的名稱空間綁定,並在XPath對象上調用.setNamespaceContext()

然後編譯XPath並照常調用。

(我想這將複製中的一些在右側的「相關」的問題給出答案,所以我不打算給一個代碼示例。這是很簡單的。)