Электронный магазин на Java и XML

       

Класс Util


В классе Util имеется несколько удобных служебных методов, которые вызываются как из объекта данных, так и из классов представления. Все они являются открытыми и статическими, поэтому их можно вызывать откуда угодно. Первые два метода этого класса, приведенные в листинге 6.37, используются для извлечения информации из данных в формате XML. Метод extractTextFrom ищет конкретный элемент, и если находит, извлекает его текстовое содержимое и возвращает. Следующий метод, extractlntFrom, использует первый метод для извлечения текста из элемента, а затем преобразует этот текст в формат Integer, после чего возвращает полученное значение.

Листинг 6.37. Начало кода класса Util и методы extractTextFrom и extractlntFrom (Util.java)

package com.XmlEcomBook.Chap06;

import org.w3c.dom.*; import java.io.*;

public class Util {

static public String extractTextFrom ( String childElementName, Element element ) { NodeList nameList = element.getElementsByTagName ( childElementName ); if( nameList.getLength() < 1 ) { return null; } Text nameText = (Text)nameList.item(0).getFirstChild(); return nameText.getData(); }

static public Integer extractIntFrom ( String childElementName, Element element ) { String s = Util.extractTextFrom( childElementName, element ); if( s == null || s.equals( "" ) ) { return null; } return new Integer( s ); }

Следующий метод также помогает работать с данными XML. Этому методу, приведенному в листинге 6.38, передается объект NodeList (список узлов), а возвращается он уже в виде текста. Основная обработка происходит в цикле for, где конструируется строка. Для каждого узла из списка узлов к строке добавляется символ открывающей угловой скобки (<) и имя тега. Затем в открывающий тег добавляется каждый из атрибутов этого узла, и тег завершается символом закрывающей угловой скобки (>). После этого рекурсивным образом вызывается метод extractMarkupAsText, чтобы преобразовать все дочерние элементы текущего узла к текстовому формату. Если узел, обрабатываемый в цикле for, является текстовым, то он непосредственно добавляется к строке.


Листинг 6.38. Метод extractMarkupAsText (Util.java)

static public String extractMarkupAsText( NodeList nodeList ) { //recursively extract String text = ""; if( nodeList != null ) { for( int i = 0; i < nodeList.getLength(); i++ ) { Node node = nodeList.item(i); if( node instanceof Element ) { Element el = (Element)node; text += "<" + el.getTagName(); NamedNodeMap attList = el.getAttributes(); int length = attList.getLength(); for( int j = 0; j < attList.getLength(); j++ ) { Attr att = (Attr)attList.item( j ); text += " " + att.getName() + "='" + att.getValue() + "'"; } text += ">"; text += extractMarkupAsText( el.getChildNodes() ); text += "</" + el.getTagName() + ">"; } if( node instanceof Text ) { text += ((Text)node).getData(); } } } return text; }

Следующие три метода, показанные в листинге 6.39, используются для отображения различных типов данных. Пустые объекты типа String, Integer и Float отображаются как null, а мы не хотели бы, чтобы пользователям приходилось видеть это на экране. Поэтому мы используем приведенные ниже вспомогательные методы, которые заменяют nul 1 на пустую строку.

Листинг 6.39. Методы notNull (Util.java)

static public String notNull( String s ) { if( s == null ) { return ""; } return s; }

static public String notNull( Integer i ) { if( i == null ) { return ""; } return i.toString(); }

static public String notNull( Float f ) { if( f == null ) { return ""; } return f.toString(); }

Следующий ряд методов, показанный в листинге 6.40, используется для преобразования строки, введенной пользователем (то есть объекта String), в некоторое значение. Мы хотим быть уверены, что, если пользователь оставил какую- либо форму незаполненной, мы получим значение null.

Листинг 6.40. Преобразование строки в значение (Util.java)

static public int getInt( String s ) { if( s == null || s.equals( "" ) ) { return 0; } return Integer.parseInt( s ); }

static public Integer getInteger( String s ) { if( s == null || s.equals( "" ) ) { return null; } return new Integer( s ); }

static public float getFloat( String s ) { if( s == null || s.equals( "" ) ) { return 0.0f; } return Float.parseFloat( s ); }

static public double getDouble( String s ) { if( s == null || s.equals( "" ) ) { return 0.0; } return Double.parseDouble( s ); }

}






Содержание раздела