Я пытаюсь выяснить, как перемещаться в область xml, которая использует пространства имен. Используя базовый xpath, я могу отлично подойти к узлу детали сообщения, но я не уверен, что мне нужно сделать с точки зрения доступа к этому блоку, поскольку все внутри использует пространства имен. Пожалуйста, кто-нибудь может помочь?Навигация по XML с помощью XPATH с другим пространством имен
Благодаря
<?xml version="1.0" encoding="UTF-8"?>
<Message>
<MessageList>
<MessageCount>2</MessageCount>
<DateTimeStamp>2016-02-11T12:50:26</DateTimeStamp>
<MessageDetail>
<MessageID>2332445456767</MessageID>
<Env:MessageContainer xmlns:Env="http://www.somesite.com/schema/v1.0/envelope" xmlns:BS="http://www.somesite.com/schema/v1.0/BusinessServices">
<Env:MessageParties>
public List<String> getRefs(String xmlMessageToSend) { try { Document doc = createDocument(xmlMessageToSend.getBytes()); XPath xpath = xPathFactory.newXPath(); xpath.setNamespaceContext(new NamespaceContext() { @Override public String getNamespaceURI(String prefix) { if (prefix == null) throw new NullPointerException("Null prefix"); else if ("Env".equals(prefix)) return "http://www.om.com/schema/v1.0/envelope"; else if ("BS".equals(prefix)) return "http://www.o.com/schema/v1.0/BusinessServices"; return XMLConstants.NULL_NS_URI; } @Override public Iterator getPrefixes(String namespaceURI) { throw new UnsupportedOperationException(); } @Override public String getPrefix(String namespaceURI) { throw new UnsupportedOperationException(); } }); XPathExpression exp = xpath .compile("/Message/MessageList/MessageDetail/Env:MessageContainer"); Node result = (Node)exp.evaluate(doc, XPathConstants.NODE); System.out.println(result.getTextContent()); } catch (XPathExpressionException | SAXException | IOException | ParserConfigurationException e) { e.printStackTrace(); } return new ArrayList<String>(); }
Используйте префикс пространства имен с NODENAME. Например: :: Env: MessageContainer – Jagrut
Вы также можете использовать общий путь. // Messagedetail/* [2]/* [1] ... – Helmer
@Jagrut, который не работал – Biscuit128