Dobre praktyki programistyczne

Prosty parser SGML

30.10.2011

Istnieje wiele bibliotek pozwalających na parsowanie danych XML, HTML czy SGML. Czasem wystarczy jednak proste rozwiązanie do osiągnięcia celu, zamiast dołączania całej biblioteki. Stworzyłem więc zbiór 4 klas, który przekształca łańcuch znaków na listę znaczników SGML wraz z argumentami i fragmenty tekstu. Parser wykorzystuje wyrażenia regularne do wydobycia elementów.

  1. public static void main(String[] args) {
  2. String text = "<center>Centered text"
  3. + "<font face=\"Times New Roman\" unused color=\"\" size=\"6\">"
  4. + "Formatted<br/>New line</center></font>";
  5. List<Element> elements = new SgmlParser().parseText(text);
  6. for (Element e : elements) {
  7. if (e instanceof TextElement) {
  8. System.out.println("Text: " + e.getText());
  9. } else if (e instanceof SgmlElement) {
  10. System.out.println("Markup: <" + e.getMarkup() + ">, "
  11. + (((SgmlElement) e).isClosing() ? "closing" : "opening")
  12. + ", attributes: " + e.getAttributes());
  13. }
  14. }
  15. }

Wynik wygląda następująco:
  1. Markup: <center>, opening, attributes: {}
  2. Text: Centered text
  3. Markup: <font>, opening, attributes: {face=Times New Roman, color=, size=6}
  4. Text: Formatted
  5. Markup: <br>, closing, attributes: {}
  6. Text: New line
  7. Markup: <center>, closing, attributes: {}
  8. Markup: <font>, closing, attributes: {}

Zobacz kod źródłowy klas i testy JUnit.
Klasy te nie mają zewnętrznych zależności z wyjątkiem adnotacji FindBugs. Licencja ISC.

Leave a Response