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

         

Метод scanCatalog...



Листинг 3.6. Метод scanCatalog инициализирует различные объекты Hashtable (theCatalog.java)

public void scanCatalog(){ Element rE = catDoc.getDocumentElement();
// the root rE.normalize();
productLineNL = rE.getElementsByTagName("product_line");
productLineHT = new Hashtable();
productHT = new Hashtable();
prodByKeyHT = new Hashtable();
// note that in contrast to other get methods, getAttributes // returns "" if the attribute does not exist int i,j, ct = productLineNL.getLength();
productLineNames = new String[ ct ]; for( i = 0 ; i < ct ; i++ ){ Element plE = (Element)productLineNL.item(i);
productLineNames[i] = plE.getAttribute("name");


NodeList prodNL = plE.getElementsByTagName("product");
productLineHT.put( productLineNames[i], prodNL );
// node list int pct = prodNL.getLength();
System.out.println( productLineNames[i] + " ct " + pct );
for( j = 0 ; j < pct ; j++ ){ Element prodE = (Element)prodNL.item(j) ; String id = prodE.getAttribute("id");
if( id == null ){ System.out.println("No id - productLine " + productLineNames[i] + " product " + j );
} else { productHT.put( id, prodE );
// product by id String keys = prodE.getAttribute("keywords");
if( keys != null ){ addProdByKey( keys, prodE );
} } } } // end loop over product lines ct = prodByKeyHT.size();
keywords = new String[ ct ]; i = 0 ; Enumeration en = prodByKeyHT.keys();
while( en.hasMoreElements()){ keywords[i++] = (String)en.nextElement();
} shellSortStr( keywords );
}

Метод addProdByKey создает объект prodByKeyHT, как показано в листинге 3.7. Этот метод должен разрешить некое затруднение, связанное с тем, что строка keywds может содержать не одно, а несколько ключевых слов (или фраз), разделенных запятыми. Для решения этой задачи используется класс StringTokenizer, но обратите внимание, что после разбора строки с помощью метода StringTokenizer нужно использовать метод trim, который убирает лишние пробелы перед строкой ключевых слов и после нее. Объект Vector, в котором хранятся ссылки на элементы, сохраняет исходный порядок расположения товаров, то есть такой же, какой был в файле XML.



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