docs: public static BusNetwork readBusNetwork(Element xmlNode, RoadNetwork roadNetwork,
  			PathBuilder pathBuilder, XMLResources resources) throws IOException {
  		final UUID id = getAttributeUUID(xmlNode, NODE_BUSNETWORK, ATTR_ID);
  
  		final BusNetwork busNetwork = new BusNetwork(id, roadNetwork);
  
  		final Node stopsNode = getNodeFromPath(xmlNode, NODE_BUSNETWORK, NODE_BUSSTOPS);
  		if (stopsNode != null) {
  			for (final Element stopNode : getElementsFromPath(stopsNode, NODE_BUSSTOP)) {
  				final BusStop stop = readBusStop(stopNode, pathBuilder, resources);
  				if (stop != null) {
  					busNetwork.addBusStop(stop);
  				}
  			}
  		}
  
  		final Node hubsNode = getNodeFromPath(xmlNode, NODE_BUSNETWORK, NODE_BUSHUBS);
  		if (hubsNode != null) {
  			for (final Element hubNode : getElementsFromPath(hubsNode, NODE_BUSHUB)) {
  				readBusHub(hubNode, busNetwork, pathBuilder, resources);
  			}
  		}
  
  		final Node linesNode = getNodeFromPath(xmlNode, NODE_BUSNETWORK, NODE_BUSLINES);
  		if (linesNode != null) {
  			BusLine line;
  			for (final Element lineNode : getElementsFromPath(linesNode, NODE_BUSLINE)) {
  				line = readBusLine(lineNode, busNetwork, roadNetwork, pathBuilder, resources);
  				if (line != null) {
  					busNetwork.addBusLine(line);
  				}
  			}
  		}
  
  		readGISElementAttributes(xmlNode, busNetwork, pathBuilder, resources);
  		final Integer color = getAttributeColorWithDefault(xmlNode, null, ATTR_COLOR);
  		if (color != null) {
  			busNetwork.setColor(color);
  		}
  
  		// Force the validity checking to be sure
  		// that all the primitives are valid or not
  		busNetwork.revalidate();
  
  		return busNetwork;
  	}