private List<Endpoint> parseEndpoints(NodeList endpointsList,
			Element serviceDiscoveryElement) {
		List<Endpoint> result = new LinkedList<Endpoint>();
		for (int i = 0; i < endpointsList.getLength(); i++) {
			Node endpointNode = endpointsList.item(i);
			if (endpointNode.getNodeType() == Node.ELEMENT_NODE) {
				Element endpointElement = (Element) endpointNode;
				String specificationUrl = getTagContent(endpointElement,
						SPECIFICATION_TAG);
				if (specificationUrl.length() == 0) {
					specificationUrl = getTagContent(serviceDiscoveryElement,
							SPECIFICATION_TAG);
				}
				String url = getTagContent(endpointElement, URL_TAG);
				Date changeset = dateParser.parseDate(getTagContent(
						endpointElement, CHANGESET_TAG));
				EndpointType type = EndpointType.getFromString(getTagContent(
						endpointElement, TYPE_TAG));
				NodeList formatNodes = endpointElement
						.getElementsByTagName(FORMAT_TAG);
				List<Format> formats = new LinkedList<Format>();
				for (int j = 0; j < formatNodes.getLength(); j++) {
					Node formatNode = formatNodes.item(j);
					if (formatNode.getNodeType() == Node.ELEMENT_NODE) {
						Element formatElement = (Element) formatNode;
						formats.add(Format
								.getFromHTTPContentTypeString(formatElement
										.getTextContent()));
					}
				}
				if (url != null && url.length() > 0) {
					result.add(new Endpoint(specificationUrl, url, changeset,
							type, formats));
				}
			}
		}
		return result;
	}