Если вы используете это в качестве своего xpath:
//venue/*
Вы получите все дочерние узлы места проведения.Затем вы можете выполнить итерацию по этому и сделать большую, если еще, имя узла и назначить их при необходимости.
Примерно так:
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//venue/*");
Object result = expr.evaluate(document, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item( i );
String nodeName = node.getNodeName();
String nodeValue = node.getChildNodes().item( 0 ).getNodeValue();
if( nodeName.equals( "name" ) ) {
name = nodeValue;
}
else if( nodeName.equals( "address" ) ) {
address = nodeValue;
} // ... the rest goes here
}
Если вы не хотите выполнять итерацию по всемДочерние элементы вы можете сделать что-то вроде этого:
XPathExpression expr = xpath.compile( "//venue" );
Object result = expr.evaluate( document, XPathConstants.NODESET );
NodeList nodes = (NodeList)result;
for( int i = 0; i < nodes.getLength(); i++ ) {
Node node = nodes.item( i );
NodeList venueChildNodes = node.getChildNodes();
String id = venueChildNodes.item( 1 ).getChildNodes().item( 0 ).getNodeValue();
System.out.println( "id: " + id );
String name = venueChildNodes.item( 3 ).getChildNodes().item( 0 ).getNodeValue();
System.out.println( "name: " + name );
String address = venueChildNodes.item( 7 ).getChildNodes().item( 0 ).getNodeValue();
System.out.println( "address: " + address );
}
Где вы получите все узлы места, а затем отобразите его дочерние элементы.Тем не менее, этот подход потребует достаточно согласованной структуры XML.Хотя что-то подобное мне кажется наиболее безопасным:
XPathExpression expr = xpath.compile( "//venue" );
Object result = expr.evaluate( document, XPathConstants.NODESET );
NodeList nodes = (NodeList)result;
for( int i = 0; i < nodes.getLength(); i++ ) {
Node node = nodes.item( i );
NodeList venueChildNodes = node.getChildNodes();
String address = null;
String name = null;
for( int j = 0; j < venueChildNodes.getLength(); j++ ) {
Node item = venueChildNodes.item( j );
String nodeName = item.getNodeName();
if ( nodeName.equals( "address" ) ) {
address = item.getChildNodes().item( 0 ).getNodeValue();
}
if ( nodeName.equals( "name" ) ) {
name = item.getChildNodes().item( 0 ).getNodeValue();
}
}
System.out.println( "address: " + address );
System.out.println( "name: " + name );
}