Метод 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.
Содержание раздела