Đây là XML đầu vào:Không thể đọc xml với tiền tố namespace sử dụng DOM phân tích cú pháp
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:SendResponse xmlns:ns2="http://mycompany.com/schema/">
<ns2:SendResult>
<ns2:Token>A00179-02</ns2:Token>
</ns2:SendResult>
</ns2:SendResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
này mã mà tôi đang sử dụng để đọc XML (xmlString Biến chứa XML ở trên):
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xmlString));
Document doc = db.parse(is);
System.out.println("Element :" + doc.getElementsByTagName("Token").item(0));
System.out.println("Element :" + doc.getElementsByTagName("ns2:Token").item(0));
Output:
Element :null
Element :[ns2:Token: null]
tôi có thể đọc phần tử nếu tôi sử dụng "ns2: token" là tên thẻ, nhưng tôi không muốn sử dụng thứ tiền tố điện tử trong mã của tôi vì tôi không chắc chắn rằng nó sẽ giống nhau hay thay đổi trong tương lai. Có cách nào để đọc phần tử xml mà không cần mã hóa cứng không gian tên trong tên thẻ không?
Có lẽ một hack, nhưng giải quyết vấn đề của tôi như một say mê :) – Tarmo