Mit dem NekoHTML-Parser ist es möglich, HTML-Code wie er in der Praxis auftritt, zu parsen. Das Maven-Artifakt lautet:

{{{
		<dependency>
			<groupId>net.sourceforge.nekohtml</groupId>
			<artifactId>nekohtml</artifactId>
			<version>1.9.15</version>
		</dependency>
}}}

Das Parsen geht vonstatten, indem ein Parser erzeugt wird:

{{{
    DOMParser parser = new DOMParser();
    parser.setFeature("http://xml.org/sax/features/namespaces", false);
    getParser().parse(new InputSource(inputStream));
    Document document = getParser().getDocument();
}}}

Falls man keine Namespace-basierte Analyse vornehmen möchte, ist das Ausschalten der XML-Namespace-Handling wichtig. Sonst werden im HTML enthaltene Namespace-Notationen verwendet, in der Folge müssten diese bei XPath-Ausdrücken ebenfalls angegeben werden. Das ist prinziell möglich, aber umständlich und meist unnötig.

{{{
    XPath xpath = XPathFactory.newInstance().newXPath();
    Node node = (Node)xpath.evaluate("//FORM", document, XPathConstants.NODE);
}}}

Die HTML-Tags sind laut Spezifikation Upper-Case, die Attribute Lower-Case.