XML JDOM

W

weetat

Hi all,

I have some problem in one of my xml file which value "&" in it.

I am using JDOM API to extract xml data to database below is code:
the error line is in SAXBuilder builder = new SAXBuilder(); code.

Any one have any suggestion or ideas how to solve it ?

Thanks

protected int process(HttpServletRequest request,
HttpServletResponse response) {
int dispatchState = 0;
try {
// Build the document with SAX and Xerces, no validation
SAXBuilder builder = new SAXBuilder();
File file = new File(xmlDir);
File [] files = file.listFiles();

// list of files in directory
Map <String,ModelBean>model_map = new
HashMap<String,ModelBean>();
Map <String,String>orig_series_map = new
HashMap<String,String>();
Map <String,String>orig_category_map = new
HashMap<String,String>();

XmlAction xmlAction = ActionManager.getXmlAction();



for(int i=0;i<files.length;i++){

String filename = files.getAbsolutePath();
logger.log(this.getClass().getName(), "XmlServlet
process() filename" ,filename);

// Create the document
Document doc = builder.build(new File(filename));
Element root_element = doc.getRootElement();
// Get a List of all direct children as Element
objects

// content data

List allroot_attributes =
root_element.getAttributes();
Attribute attribute = root_element.getAttribute("id");
String content_id = attribute.getValue();
attribute = root_element.getAttribute("revision");
int revision = attribute.getIntValue();
attribute = root_element.getAttribute("lang");
String lang = attribute.getValue();
attribute = root_element.getAttribute("type");
String type = attribute.getValue();
attribute = root_element.getAttribute("ts-type");
String ts_type = attribute.getValue();
String xmlfile = files.getName();
logger.log(this.getClass().getName(), "XmlServlet
process() ts_type" ,ts_type);
logger.log(this.getClass().getName(), "XmlServlet
process() xmlfile" ,xmlfile);
String title = "";

if(ts_type.equalsIgnoreCase("Type-A"))
title = root_element.getChild("main-
text").getChild("content-title").getText();
if(ts_type.equalsIgnoreCase("Type-B"))
title = root_element.getChild("main-
text").getChild("content-title").getText();
if(ts_type.equalsIgnoreCase("Type-C"))
title = root_element.getChild("main-
text").getChild("content-title").getText();
if(ts_type.equalsIgnoreCase("Type-D"))
title = root_element.getChild("download-
page").getChild("content-title").getText();

logger.log(this.getClass().getName(), "XmlServlet
process() title" ,title);

boolean in_queue =
xmlAction.getContentInQueue(content_id,revision,lang);
logger.log(this.getClass().getName(), "XmlServlet
process() in_queue" ,String.valueOf(in_queue));

if(!in_queue){
logger.log(this.getClass().getName(), "XmlServlet
process() content_id" ,content_id);
logger.log(this.getClass().getName(), "XmlServlet
process() revision" , String.valueOf(revision));
logger.log(this.getClass().getName(), "XmlServlet
process() lang" , lang);
// add new content

xmlAction.addNewContent(content_id,revision,lang,ts_type,xmlfile,title);
// add new content reference

xmlAction.addNewContentReference(content_id,revision,lang,"");
// get all root child elements
List allChildren = root_element.getChildren();
// list all child elements
for (Iterator iter = allChildren.iterator();
iter.hasNext(); ){
Element element = (Element)iter.next();

// get product-information child elements
if(element.getName().equalsIgnoreCase("product-
information")){
List allProductInfo_Children =
element.getChildren();
for (Iterator product_info_iter =
allProductInfo_Children.iterator(); product_info_iter.hasNext(); ){
Element product_info_element =
(Element)product_info_iter.next();

// get model-information child
elements

if(product_info_element.getName().equalsIgnoreCase("model-
information")){
List allmodel_info_Children =
product_info_element.getChildren();
for (Iterator model_info_iter =
allmodel_info_Children.iterator(); model_info_iter.hasNext(); ){
Element model_info_element =
(Element)model_info_iter.next();
// get category child elements

if(model_info_element.getName().equalsIgnoreCase("category")){
String category_code=
model_info_element.getChild("category-code").getText();
String category_name=
model_info_element.getChild("category-name").getText();

orig_category_map.put(category_code,category_name);
List allcategory_Children
= model_info_element.getChildren();
for (Iterator
category_iter = allcategory_Children.iterator();
category_iter.hasNext(); ){
Element
category_element = (Element)category_iter.next();

if(category_element.getName().equalsIgnoreCase("series")){
String series_code
= category_element.getChild("series-code").getText();
String series_name
= category_element.getChild("series-name").getText();

orig_series_map.put(series_code,series_name);
List model_list =
category_element.getChildren("model");
for(Iterator
model_iter = model_list.iterator(); model_iter.hasNext(); ){
Element
model_element = (Element)model_iter.next();
ModelBean
modelBean = new ModelBean();
String
model_code = model_element.getChild("model-code").getText();
String
model_name = model_element.getChild("model-name").getText();

modelBean.setCategory_code(category_code);

modelBean.setCategory_name(category_name);

modelBean.setSeries_code(series_code);

modelBean.setSeries_name(series_name);

modelBean.setModel_name(model_name);

model_map.put(model_code,modelBean);
// add new
content models

xmlAction.addNewContentModels(content_id,revision,lang,model_code);

}

}

}

}

}
}
}
}

}

// move xml files to staging folder
files.renameTo(new File(stagingDir + "/" +
files.getName()));
}else{
// delete xml file if content still in queue
files.delete();
}


if(!in_queue){
Set model_set = model_map.entrySet();

for (Iterator model_map_iter =
model_set.iterator(); model_map_iter.hasNext(); ) {
Map.Entry entry =
(Map.Entry)model_map_iter.next();
String model_code = (String)entry.getKey();
ModelBean modelBean =
(ModelBean)entry.getValue();
String model_name =modelBean.getModel_name();
String series_code
=modelBean.getSeries_code();
String series_name
=modelBean.getSeries_name();
String category_code
=modelBean.getCategory_code();
String category_name
=modelBean.getCategory_name();
// add new model

xmlAction.addNewModel(model_code,model_name,category_code,series_code);

xmlAction.addNewModelOwner(model_code,category_code,series_code);

}

Set orig_series_set = orig_series_map.entrySet();
for (Iterator orig_series_iter =
orig_series_set.iterator(); orig_series_iter.hasNext(); ) {
Map.Entry entry =
(Map.Entry)orig_series_iter.next();
String series_code = (String)entry.getKey();
String series_name = (String)entry.getValue();
// add new orig series
if(!
StringCommon.check_string_empty(series_code))

xmlAction.addNewOrigSeries(series_code,series_name);

}

Set orig_category_set =
orig_category_map.entrySet();
for (Iterator orig_category_iter =
orig_category_set.iterator(); orig_category_iter.hasNext(); ) {
Map.Entry entry =
(Map.Entry)orig_category_iter.next();
String category_code = (String)entry.getKey();
String category_name =
(String)entry.getValue();
// add new orig category
if(!
StringCommon.check_string_empty(category_code))

xmlAction.addNewOrigCategories(category_code,category_name);

}
logger.log(this.getClass().getName(), "XmlServlet
process()" , "upload xml data to database ok");
}
}

} catch (Exception ex) {
logger.log(this.getClass().getName(), "XmlServlet
process()" , ex.getMessage(),ex);
}

return dispatchState;
}
 
B

bencoe

Hi all,

I have some problem in one of my xml file which value "&" in it.

I am using JDOM API to extract xml data to database below is code:
the error line is in SAXBuilder builder = new SAXBuilder(); code.

Any one have any suggestion or ideas how to solve it ?

Thanks

protected int process(HttpServletRequest request,
HttpServletResponse response) {
int dispatchState = 0;
try {
// Build the document with SAX and Xerces, no validation
SAXBuilder builder = new SAXBuilder();
File file = new File(xmlDir);
File [] files = file.listFiles();

// list of files in directory
Map <String,ModelBean>model_map = new
HashMap<String,ModelBean>();
Map <String,String>orig_series_map = new
HashMap<String,String>();
Map <String,String>orig_category_map = new
HashMap<String,String>();

XmlAction xmlAction = ActionManager.getXmlAction();

for(int i=0;i<files.length;i++){

String filename = files.getAbsolutePath();
logger.log(this.getClass().getName(), "XmlServlet
process() filename" ,filename);

// Create the document
Document doc = builder.build(new File(filename));
Element root_element = doc.getRootElement();
// Get a List of all direct children as Element
objects

// content data

List allroot_attributes =
root_element.getAttributes();
Attribute attribute = root_element.getAttribute("id");
String content_id = attribute.getValue();
attribute = root_element.getAttribute("revision");
int revision = attribute.getIntValue();
attribute = root_element.getAttribute("lang");
String lang = attribute.getValue();
attribute = root_element.getAttribute("type");
String type = attribute.getValue();
attribute = root_element.getAttribute("ts-type");
String ts_type = attribute.getValue();
String xmlfile = files.getName();
logger.log(this.getClass().getName(), "XmlServlet
process() ts_type" ,ts_type);
logger.log(this.getClass().getName(), "XmlServlet
process() xmlfile" ,xmlfile);
String title = "";

if(ts_type.equalsIgnoreCase("Type-A"))
title = root_element.getChild("main-
text").getChild("content-title").getText();
if(ts_type.equalsIgnoreCase("Type-B"))
title = root_element.getChild("main-
text").getChild("content-title").getText();
if(ts_type.equalsIgnoreCase("Type-C"))
title = root_element.getChild("main-
text").getChild("content-title").getText();
if(ts_type.equalsIgnoreCase("Type-D"))
title = root_element.getChild("download-
page").getChild("content-title").getText();

logger.log(this.getClass().getName(), "XmlServlet
process() title" ,title);

boolean in_queue =
xmlAction.getContentInQueue(content_id,revision,lang);
logger.log(this.getClass().getName(), "XmlServlet
process() in_queue" ,String.valueOf(in_queue));

if(!in_queue){
logger.log(this.getClass().getName(), "XmlServlet
process() content_id" ,content_id);
logger.log(this.getClass().getName(), "XmlServlet
process() revision" , String.valueOf(revision));
logger.log(this.getClass().getName(), "XmlServlet
process() lang" , lang);
// add new content

xmlAction.addNewContent(content_id,revision,lang,ts_type,xmlfile,title);
// add new content reference

xmlAction.addNewContentReference(content_id,revision,lang,"");
// get all root child elements
List allChildren = root_element.getChildren();
// list all child elements
for (Iterator iter = allChildren.iterator();
iter.hasNext(); ){
Element element = (Element)iter.next();

// get product-information child elements
if(element.getName().equalsIgnoreCase("product-
information")){
List allProductInfo_Children =
element.getChildren();
for (Iterator product_info_iter =
allProductInfo_Children.iterator(); product_info_iter.hasNext(); ){
Element product_info_element =
(Element)product_info_iter.next();

// get model-information child
elements

if(product_info_element.getName().equalsIgnoreCase("model-
information")){
List allmodel_info_Children =
product_info_element.getChildren();
for (Iterator model_info_iter =
allmodel_info_Children.iterator(); model_info_iter.hasNext(); ){
Element model_info_element =
(Element)model_info_iter.next();
// get category child elements

if(model_info_element.getName().equalsIgnoreCase("category")){
String category_code=
model_info_element.getChild("category-code").getText();
String category_name=
model_info_element.getChild("category-name").getText();

orig_category_map.put(category_code,category_name);
List allcategory_Children
= model_info_element.getChildren();
for (Iterator
category_iter = allcategory_Children.iterator();
category_iter.hasNext(); ){
Element
category_element = (Element)category_iter.next();

if(category_element.getName().equalsIgnoreCase("series")){
String series_code
= category_element.getChild("series-code").getText();
String series_name
= category_element.getChild("series-name").getText();

orig_series_map.put(series_code,series_name);
List model_list =
category_element.getChildren("model");
for(Iterator
model_iter = model_list.iterator(); model_iter.hasNext(); ){
Element
model_element = (Element)model_iter.next();
ModelBean
modelBean = new ModelBean();
String
model_code = model_element.getChild("model-code").getText();
String
model_name = model_element.getChild("model-name").getText();

modelBean.setCategory_code(category_code);

modelBean.setCategory_name(category_name);

modelBean.setSeries_code(series_code);

modelBean.setSeries_name(series_name);

modelBean.setModel_name(model_name);

model_map.put(model_code,modelBean);
// add new
content models

xmlAction.addNewContentModels(content_id,revision,lang,model_code);

}

}

}

}

}
}
}
}

}

// move xml files to staging folder
files.renameTo(new File(stagingDir + "/" +
files.getName()));
}else{
// delete xml file if content still in queue
files.delete();
}

if(!in_queue){
Set model_set = model_map.entrySet();

for (Iterator model_map_iter =
model_set.iterator(); model_map_iter.hasNext(); ) {
Map.Entry entry =
(Map.Entry)model_map_iter.next();
String model_code = (String)entry.getKey();
ModelBean modelBean =
(ModelBean)entry.getValue();
String model_name =modelBean.getModel_name();
String series_code
=modelBean.getSeries_code();
String series_name
=modelBean.getSeries_name();
String category_code
=modelBean.getCategory_code();
String category_name
=modelBean.getCategory_name();
// add new model

xmlAction.addNewModel(model_code,model_name,category_code,series_code);

xmlAction.addNewModelOwner(model_code,category_code,series_code);

}

Set orig_series_set = orig_series_map.entrySet();
for (Iterator orig_series_iter =
orig_series_set.iterator(); orig_series_iter.hasNext(); ) {
Map.Entry entry =
(Map.Entry)orig_series_iter.next();
String series_code = (String)entry.getKey();
String series_name = (String)entry.getValue();
// add new orig series
if(!
StringCommon.check_string_empty(series_code))

xmlAction.addNewOrigSeries(series_code,series_name);

}

Set orig_category_set =
orig_category_map.entrySet();
for (Iterator orig_category_iter =
orig_category_set.iterator(); orig_category_iter.hasNext(); ) {
Map.Entry entry =
(Map.Entry)orig_category_iter.next();
String category_code = (String)entry.getKey();
String category_name =
(String)entry.getValue();
// add new orig category
if(!
StringCommon.check_string_empty(category_code))

xmlAction.addNewOrigCategories(category_code,category_name);

}
logger.log(this.getClass().getName(), "XmlServlet
process()" , "upload xml data to database ok");
}
}

} catch (Exception ex) {
logger.log(this.getClass().getName(), "XmlServlet
process()" , ex.getMessage(),ex);
}

return dispatchState;
}


When I'm working with XML files I make sure I put them through the
same filters I put my HTML through..

replaceAll("&","&amp;");
replaceAll(">","&gt;");
replaceAll("<","&lt;");

it shouldn't be necessary but also,

replaceAll("\"","&quot;");

This does the trick for me when working with web-based data, another
solution is to use a

"CDATA" section to hold your data, instead of the default #text, stuff
inside #text is parsed for entities stuff in CDATA isn't,

Anyways, one of these approaches should work,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,736
Latest member
zacharyharris

Latest Threads

Top