[247603] merge XPathUtil into XPathService
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/VisualizeReportUtil.java b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/VisualizeReportUtil.java
index 0227ee5..9ae2edb 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/VisualizeReportUtil.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind.html/src/org/eclipse/actf/visualization/engines/blind/html/util/VisualizeReportUtil.java
@@ -22,7 +22,7 @@
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import org.eclipse.actf.util.xpath.XPathUtil;
+import org.eclipse.actf.util.xpath.XPathServiceFactory;
 import org.eclipse.actf.visualization.engines.blind.eval.PageEvaluation;
 import org.eclipse.actf.visualization.engines.blind.html.VisualizeEngine;
 import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder;
@@ -165,9 +165,11 @@
 			String idS = frameElem.getAttribute(Html2ViewMapData.ACTF_ID);
 			if (idS.length() > 0) {
 				Integer idObj = new Integer(idS);
-				NodeList nl = XPathUtil.evalXPathNodeList(resultDoc
-						.getDocumentElement(), "//*[@"
-						+ Html2ViewMapData.ACTF_ID + "='" + idObj + "']/span");
+				NodeList nl = XPathServiceFactory.newService()
+						.evalPathForNodeList(
+								"//*[@" + Html2ViewMapData.ACTF_ID + "='"
+										+ idObj + "']/span",
+								resultDoc.getDocumentElement());
 				if ((nl != null) && (nl.getLength() == 1)) {
 					Element frameElemResultDoc = (Element) nl.item(0);
 					Element img = createErrorImageElement(frameElemResultDoc,
diff --git a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java
index 258191c..2ecf658 100644
--- a/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java
+++ b/plugins/org.eclipse.actf.visualization.engines.blind/src/org/eclipse/actf/visualization/engines/blind/eval/EvaluationResultBlind.java
@@ -15,52 +15,57 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.actf.util.xpath.XPathUtil;
+import org.eclipse.actf.util.xpath.XPathService;
+import org.eclipse.actf.util.xpath.XPathServiceFactory;
 import org.eclipse.actf.visualization.eval.EvaluationResultImpl;
 import org.eclipse.actf.visualization.eval.guideline.GuidelineHolder;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.w3c.dom.NodeList;
 
-
-
 public class EvaluationResultBlind extends EvaluationResultImpl {
 
-    private int count = 0;
-    
-    public void addProblemItems(Collection<IProblemItem> c) {
-        stripProblem(c);
-        super.addProblemItems(c);
-    }
+	private static final XPathService xpathService = XPathServiceFactory
+			.newService();
+	private static final Object EXP1 = xpathService
+			.compile("ancestor::noscript");
 
-    public void setProblemList(List<IProblemItem> problemList) {
-        count = 0;
-        stripProblem(problemList);
-        super.setProblemList(problemList);
-    }
+	private int count = 0;
 
-    private void stripProblem(Collection<IProblemItem> c){
-        GuidelineHolder holder = GuidelineHolder.getInstance();
-        for (Iterator<IProblemItem> i = c.iterator(); i.hasNext();) {
-            try {
-                IProblemItem tmpItem = (IProblemItem) i.next();
-                if (holder.isMatchedCheckItem(tmpItem.getEvaluationItem())) {
-                    tmpItem.setSerialNumber(count);
-                    if (tmpItem.isCanHighlight() && tmpItem.getTargetNode() != null) {
-                        NodeList tmpNL = XPathUtil.evalXPathNodeList(tmpItem.getTargetNode(), "ancestor::noscript");
-                        // noframes can highlight
-                        if (tmpNL != null && tmpNL.getLength() > 0) {
-                            tmpItem.setCanHighlight(false);
-                        }
-                    }
-                    count++;
-                } else {
-                    i.remove();
-                }
-            } catch (Exception e) {
-                // e.printStackTrace();
-                i.remove();
-            }
-        }
-    }
-    
+	public void addProblemItems(Collection<IProblemItem> c) {
+		stripProblem(c);
+		super.addProblemItems(c);
+	}
+
+	public void setProblemList(List<IProblemItem> problemList) {
+		count = 0;
+		stripProblem(problemList);
+		super.setProblemList(problemList);
+	}
+
+	private void stripProblem(Collection<IProblemItem> c) {
+		GuidelineHolder holder = GuidelineHolder.getInstance();
+		for (Iterator<IProblemItem> i = c.iterator(); i.hasNext();) {
+			try {
+				IProblemItem tmpItem = (IProblemItem) i.next();
+				if (holder.isMatchedCheckItem(tmpItem.getEvaluationItem())) {
+					tmpItem.setSerialNumber(count);
+					if (tmpItem.isCanHighlight()
+							&& tmpItem.getTargetNode() != null) {
+						NodeList tmpNL = xpathService.evalForNodeList(EXP1,
+								tmpItem.getTargetNode());
+						// noframes can highlight
+						if (tmpNL != null && tmpNL.getLength() > 0) {
+							tmpItem.setCanHighlight(false);
+						}
+					}
+					count++;
+				} else {
+					i.remove();
+				}
+			} catch (Exception e) {
+				// e.printStackTrace();
+				i.remove();
+			}
+		}
+	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
index 007d7e8..389452c 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/HtmlEvalUtil.java
@@ -20,7 +20,8 @@
 import java.util.TreeSet;
 import java.util.Vector;
 
-import org.eclipse.actf.util.xpath.XPathUtil;
+import org.eclipse.actf.util.xpath.XPathService;
+import org.eclipse.actf.util.xpath.XPathServiceFactory;
 import org.eclipse.actf.visualization.eval.EvaluationUtil;
 import org.eclipse.actf.visualization.eval.html.statistics.FlashData;
 import org.eclipse.actf.visualization.eval.html.statistics.HeadingsData;
@@ -57,6 +58,13 @@
 	public static final String[] EVENT_FOCUS = { ATTR_ONFOCUS, ATTR_ONBLUR,
 			ATTR_ONSELECT };
 
+	private static final XPathService xpathService = XPathServiceFactory
+			.newService();
+	private static final Object EXP1 = xpathService.compile(".//a[@"
+			+ ATTR_HREF + "]");
+	private static final Object EXP2 = xpathService
+			.compile("//h1|//h2|//h3|//h4|//h5|//h6");
+
 	private Document target;
 
 	private Document resultDoc;
@@ -144,8 +152,8 @@
 	private HashSet<String> notExistHrefSet = new HashSet<String>();
 
 	public HtmlEvalUtil(Document target, Document resultDoc, String curUrl,
-			Map<Node, Integer> document2IdMap, Document origDom, Document ieDom,
-			PageData pageData, boolean isDBCS, boolean isIEDom) {
+			Map<Node, Integer> document2IdMap, Document origDom,
+			Document ieDom, PageData pageData, boolean isDBCS, boolean isIEDom) {
 		this(target, resultDoc, curUrl, document2IdMap, origDom, ieDom,
 				pageData, 0, null, isDBCS, isIEDom);
 	}
@@ -154,8 +162,8 @@
 	 * 
 	 */
 	public HtmlEvalUtil(Document target, Document resultDoc, String curUrl,
-			Map<Node, Integer> document2IdMap, Document origDom, Document ieDom,
-			PageData pageData, int invisibleElementCount,
+			Map<Node, Integer> document2IdMap, Document origDom,
+			Document ieDom, PageData pageData, int invisibleElementCount,
 			String[] invisibleLinkStrings, boolean isDBCS, boolean isIEDom) {
 		this.target = target;
 		this.resultDoc = resultDoc;
@@ -189,8 +197,7 @@
 		// System.out.println(df.format(new Date(System.currentTimeMillis()))
 		// + ": checker engine init");
 
-		NodeList tmpNL = XPathUtil.evalXPathNodeList(target, ".//" + "a"
-				+ ("[@" + ATTR_HREF + "]"));
+		NodeList tmpNL = xpathService.evalForNodeList(EXP1, target);
 		int length = tmpNL.getLength();
 
 		if (length > 0) {
@@ -338,10 +345,9 @@
 			}
 		}
 
-		NodeList headingsNL = XPathUtil.evalXPathNodeList(target,
-				"//h1|//h2|//h3|//h4|//h5|//h6");
+		NodeList headingsNL = xpathService.evalForNodeList(EXP2, target);
 		length = headingsNL.getLength();
-		Vector<HeadingsData>tmpV2 = new Vector<HeadingsData>();
+		Vector<HeadingsData> tmpV2 = new Vector<HeadingsData>();
 		headings = new Element[headingsNL.getLength()];
 		for (int i = 0; i < length; i++) {
 			Element tmpE = (Element) headingsNL.item(i);
@@ -365,7 +371,7 @@
 	}
 
 	private Element[] getElementsArrayByXPath(Document target, String xpath) {
-		NodeList tmpNL = XPathUtil.evalXPathNodeList(target, xpath);
+		NodeList tmpNL = xpathService.evalPathForNodeList(xpath, target);
 		int length = tmpNL.getLength();
 		Element[] result = new Element[length];
 		for (int i = 0; i < length; i++) {
@@ -435,7 +441,7 @@
 
 		if (EvaluationUtil.isOriginalDOM()) {
 			// target = orig DOM
-			if (isIEDom||null==ieDom) {
+			if (isIEDom || null == ieDom) {
 				// parse error
 				return;
 			}
@@ -444,8 +450,7 @@
 					.asList(aWithHref_hrefs));
 			// trim()?
 
-			NodeList ieNL = XPathUtil.evalXPathNodeList(ieDom, ".//" + "a"
-					+ ("[@" + ATTR_HREF + "]"));
+			NodeList ieNL = xpathService.evalForNodeList(EXP1, ieDom);
 			int size = ieNL.getLength();
 			for (int i = 0; i < size; i++) {
 				Element tmpE = (Element) ieNL.item(i);
@@ -456,8 +461,7 @@
 			}
 		} else {
 			// target = IE DOM
-			NodeList orgNL = XPathUtil.evalXPathNodeList(origDom, ".//" + "a"
-					+ ("[@" + ATTR_HREF + "]"));
+			NodeList orgNL = xpathService.evalForNodeList(EXP1, origDom);
 			int size = orgNL.getLength();
 			TreeSet<String> existSet = new TreeSet<String>();
 			for (int i = 0; i < size; i++) {
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/FlashData.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/FlashData.java
index 4892321..2934b78 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/FlashData.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/FlashData.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.actf.visualization.eval.html.statistics;
 
-import org.eclipse.actf.util.xpath.XPathUtil;
+import org.eclipse.actf.visualization.internal.eval.XMLStringUtil;
 
 public class FlashData implements IPageStatisticsTag {
 
@@ -196,7 +196,7 @@
 
 	public String getItemXML() {
 		StringBuffer tmpSB = new StringBuffer("<" + FLASH + " " + SRC + "=\""
-				+ XPathUtil.canonicalize(src) + "\" "
+				+ XMLStringUtil.canonicalize(src) + "\" "
 				+ FlashData.FLASH_IS_OBJECT + "=\"" + isObject + "\" ");
 		if (isObject && withEmbed) {
 			tmpSB.append(FlashData.FLASH_WITHEMBED + "=\"true\" ");
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/HeadingsData.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/HeadingsData.java
index 8d530aa..d43388b 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/HeadingsData.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/HeadingsData.java
@@ -12,7 +12,7 @@
 package org.eclipse.actf.visualization.eval.html.statistics;
 
 import org.eclipse.actf.util.xpath.XPathCreator;
-import org.eclipse.actf.util.xpath.XPathUtil;
+import org.eclipse.actf.visualization.internal.eval.XMLStringUtil;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 
@@ -75,7 +75,7 @@
 	}
 
 	private String getAttr(String name, String value) {
-		return ((name + "=\"" + XPathUtil.canonicalize(value) + "\" "));
+		return ((name + "=\"" + XMLStringUtil.canonicalize(value) + "\" "));
 	}
 
 	public String getItemXML() {
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
index cb8d642..921ef0b 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/ImageStatData.java
@@ -15,262 +15,267 @@
 import java.util.Vector;
 
 import org.eclipse.actf.util.FileUtils;
-import org.eclipse.actf.util.xpath.XPathUtil;
+import org.eclipse.actf.util.xpath.XPathService;
+import org.eclipse.actf.util.xpath.XPathServiceFactory;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.eval.problem.ProblemItemImpl;
+import org.eclipse.actf.visualization.internal.eval.XMLStringUtil;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.html.HTMLAnchorElement;
 import org.w3c.dom.html.HTMLImageElement;
 import org.xml.sax.Attributes;
 
-
-
 public class ImageStatData implements IPageStatisticsTag {
 
 	public static final String ISMAP = "ismap";
 
-	public static final String USEMAP ="usemap";
+	public static final String USEMAP = "usemap";
 
 	public static final String LONGDESC = "longdesc";
 
-	
-    protected String altS = "";
+	private static final XPathService xpathService = XPathServiceFactory
+			.newService();
+	private static final Object EXP1 = xpathService.compile("ancestor::a");
 
-    protected Element ancestorLink = null;
+	protected String altS = "";
 
-    protected String destUrlS = "";
+	protected Element ancestorLink = null;
 
-    protected boolean hasAlt = false;
+	protected String destUrlS = "";
 
-    protected boolean hasHeight = false;
+	protected boolean hasAlt = false;
 
-    protected boolean hasLongDesc = false;
+	protected boolean hasHeight = false;
 
-    protected boolean hasUseMap = false;
+	protected boolean hasLongDesc = false;
 
-    protected boolean hasWidth = false;
+	protected boolean hasUseMap = false;
 
-    protected String heightS = "";
+	protected boolean hasWidth = false;
 
-    protected boolean isInLink = false;
+	protected String heightS = "";
 
-    protected boolean isMap = false;
+	protected boolean isInLink = false;
 
-    protected String longDescS = "";
+	protected boolean isMap = false;
 
-    // for problem statistics
-    protected Vector<IProblemItem> problemV = new Vector<IProblemItem>();
+	protected String longDescS = "";
 
-    protected String srcS = "";
+	// for problem statistics
+	protected Vector<IProblemItem> problemV = new Vector<IProblemItem>();
 
-    protected String urlS = "";
+	protected String srcS = "";
 
-    protected String useMapS = "";
+	protected String urlS = "";
 
-    protected String widthS = "";
+	protected String useMapS = "";
 
+	protected String widthS = "";
 
-    protected ImageStatData() {
-    }
+	protected ImageStatData() {
+	}
 
-    /**
-     * @param tagName
-     * @param text
-     */
-    public ImageStatData(HTMLImageElement target, URL baseURL) {
+	/**
+	 * @param tagName
+	 * @param text
+	 */
+	public ImageStatData(HTMLImageElement target, URL baseURL) {
 
-        srcS = target.getSrc();
-        urlS = srcS;
-        try {
-            urlS = new URL(baseURL, urlS).toString();
-        } catch (Exception e) {
-        }
+		srcS = target.getSrc();
+		urlS = srcS;
+		try {
+			urlS = new URL(baseURL, urlS).toString();
+		} catch (Exception e) {
+		}
 
-        //System.out.println(urlS);
+		// System.out.println(urlS);
 
-        if (hasAlt = target.hasAttribute(ALT)) {
-            altS = target.getAlt();
-        }
-        if (hasLongDesc = target.hasAttribute(ImageStatData.LONGDESC)) {
-            longDescS = target.getLongDesc();
-        }
-        if (hasUseMap = target.hasAttribute(ImageStatData.USEMAP)) {
-            useMapS = target.getUseMap();
-        }
+		if (hasAlt = target.hasAttribute(ALT)) {
+			altS = target.getAlt();
+		}
+		if (hasLongDesc = target.hasAttribute(ImageStatData.LONGDESC)) {
+			longDescS = target.getLongDesc();
+		}
+		if (hasUseMap = target.hasAttribute(ImageStatData.USEMAP)) {
+			useMapS = target.getUseMap();
+		}
 
-        if (hasWidth = target.hasAttribute(WIDTH)) {
-            widthS = target.getWidth();
-        }
+		if (hasWidth = target.hasAttribute(WIDTH)) {
+			widthS = target.getWidth();
+		}
 
-        if (hasHeight = target.hasAttribute(HEIGHT)) {
-            heightS = target.getHeight();
-        }
+		if (hasHeight = target.hasAttribute(HEIGHT)) {
+			heightS = target.getHeight();
+		}
 
-        isMap = target.getIsMap();
+		isMap = target.getIsMap();
 
-        NodeList tmpNL = XPathUtil.evalXPathNodeList(target, "ancestor::a");
-        //XPathUtil.showNodeList(tmpNL,true);
-        int len = tmpNL.getLength();
-        if (len > 0) {
-            HTMLAnchorElement tmpE = (HTMLAnchorElement) tmpNL.item(0);
-            if (isInLink = tmpE.hasAttribute(HREF)) {
-                destUrlS = tmpE.getHref();
-                ancestorLink = tmpE;
-                try {
-                    destUrlS = new URL(baseURL, destUrlS).toString();
-                } catch (Exception e) {
-                }
-            }
-        }
-    }
+		NodeList tmpNL = xpathService.evalForNodeList(EXP1, target);
+		// XPathUtil.showNodeList(tmpNL,true);
+		int len = tmpNL.getLength();
+		if (len > 0) {
+			HTMLAnchorElement tmpE = (HTMLAnchorElement) tmpNL.item(0);
+			if (isInLink = tmpE.hasAttribute(HREF)) {
+				destUrlS = tmpE.getHref();
+				ancestorLink = tmpE;
+				try {
+					destUrlS = new URL(baseURL, destUrlS).toString();
+				} catch (Exception e) {
+				}
+			}
+		}
+	}
 
-    public void addProblemItem(Attributes atts) throws StatisticsDataFormatException {
-        String idS = atts.getValue(ID);
-        String targetS = atts.getValue(TARGET_STRING);
+	public void addProblemItem(Attributes atts)
+			throws StatisticsDataFormatException {
+		String idS = atts.getValue(ID);
+		String targetS = atts.getValue(TARGET_STRING);
 
-        if (idS != null) {
-            IProblemItem tmpItem = new ProblemItemImpl(idS);
-            if (!tmpItem.getId().equals("unknown")) {
-                if (targetS != null) {
-                    tmpItem.setTargetStringForHPB(targetS);
-                }
-                addProblemItem(tmpItem);
-                return;
-            }
-        }
-        throw new StatisticsDataFormatException();
-    }
+		if (idS != null) {
+			IProblemItem tmpItem = new ProblemItemImpl(idS);
+			if (!tmpItem.getId().equals("unknown")) {
+				if (targetS != null) {
+					tmpItem.setTargetStringForHPB(targetS);
+				}
+				addProblemItem(tmpItem);
+				return;
+			}
+		}
+		throw new StatisticsDataFormatException();
+	}
 
-    public void addProblemItem(IProblemItem problemItem) {
-        problemV.add(problemItem);
-    }
+	public void addProblemItem(IProblemItem problemItem) {
+		problemV.add(problemItem);
+	}
 
-    public String getAltS() {
-        return this.altS;
-    }
+	public String getAltS() {
+		return this.altS;
+	}
 
-    public Element getAncestorLink() {
-        return ancestorLink;
-    }
+	public Element getAncestorLink() {
+		return ancestorLink;
+	}
 
-    private String getAttr(String name, boolean value) {
-        return (getAttr(name, Boolean.toString(value)));
-    }
+	private String getAttr(String name, boolean value) {
+		return (getAttr(name, Boolean.toString(value)));
+	}
 
-    private String getAttr(String name, String value) {
-        return ((name + "=\"" + XPathUtil.canonicalize(value) + "\" "));
-    }
+	private String getAttr(String name, String value) {
+		return ((name + "=\"" + XMLStringUtil.canonicalize(value) + "\" "));
+	}
 
-    public String getDestUrlS() {
-        return destUrlS;
-    }
+	public String getDestUrlS() {
+		return destUrlS;
+	}
 
-    public String getHeightS() {
-        return heightS;
-    }
+	public String getHeightS() {
+		return heightS;
+	}
 
-    public String getItemXML() {
-        StringBuffer tmpSB = new StringBuffer("<" + IMAGE + " " + getAttr(SRC, srcS) + getAttr(URL, urlS)
-                + getAttr(ImageStatData.ISMAP, isMap));
-        if (hasAlt) {
-            tmpSB.append(getAttr(ALT, altS));
-        }
-        if (hasWidth) {
-            tmpSB.append(getAttr(WIDTH, widthS));
-        }
-        if (hasHeight) {
-            tmpSB.append(getAttr(HEIGHT, heightS));
-        }
-        if (isInLink) {
-            tmpSB.append(getAttr(DEST, destUrlS));
-        }
-        if (hasLongDesc) {
-            tmpSB.append(getAttr(ImageStatData.LONGDESC, longDescS));
-        }
-        if (hasUseMap) {
-            tmpSB.append(getAttr(ImageStatData.USEMAP, useMapS));
-        }
-        int size = problemV.size();
-        if (size == 0) {
-            tmpSB.append(" />");
-        } else {
-            tmpSB.append(" >" + FileUtils.LINE_SEP);
-            for (int i = 0; i < size; i++) {
-                IProblemItem pItem = (IProblemItem) problemV.get(i);
-                tmpSB.append("<" + ERROR + " " + getAttr(ID, pItem.getId())
-                        + getAttr(TARGET_STRING, pItem.getTargetStringForHPB()) + " />" + FileUtils.LINE_SEP);
-            }
-            tmpSB.append("</" + IMAGE + ">");
-        }
-        return (tmpSB.toString());
-    }
+	public String getItemXML() {
+		StringBuffer tmpSB = new StringBuffer("<" + IMAGE + " "
+				+ getAttr(SRC, srcS) + getAttr(URL, urlS)
+				+ getAttr(ImageStatData.ISMAP, isMap));
+		if (hasAlt) {
+			tmpSB.append(getAttr(ALT, altS));
+		}
+		if (hasWidth) {
+			tmpSB.append(getAttr(WIDTH, widthS));
+		}
+		if (hasHeight) {
+			tmpSB.append(getAttr(HEIGHT, heightS));
+		}
+		if (isInLink) {
+			tmpSB.append(getAttr(DEST, destUrlS));
+		}
+		if (hasLongDesc) {
+			tmpSB.append(getAttr(ImageStatData.LONGDESC, longDescS));
+		}
+		if (hasUseMap) {
+			tmpSB.append(getAttr(ImageStatData.USEMAP, useMapS));
+		}
+		int size = problemV.size();
+		if (size == 0) {
+			tmpSB.append(" />");
+		} else {
+			tmpSB.append(" >" + FileUtils.LINE_SEP);
+			for (int i = 0; i < size; i++) {
+				IProblemItem pItem = (IProblemItem) problemV.get(i);
+				tmpSB.append("<" + ERROR + " " + getAttr(ID, pItem.getId())
+						+ getAttr(TARGET_STRING, pItem.getTargetStringForHPB())
+						+ " />" + FileUtils.LINE_SEP);
+			}
+			tmpSB.append("</" + IMAGE + ">");
+		}
+		return (tmpSB.toString());
+	}
 
-    public String getLongDescS() {
-        return longDescS;
-    }
+	public String getLongDescS() {
+		return longDescS;
+	}
 
-    public Vector<IProblemItem> getProblemV() {
-        return this.problemV;
-    }
+	public Vector<IProblemItem> getProblemV() {
+		return this.problemV;
+	}
 
-    public String getSrcS() {
-        return srcS;
-    }
+	public String getSrcS() {
+		return srcS;
+	}
 
-    public String getUrlS() {
-        return this.urlS;
-    }
+	public String getUrlS() {
+		return this.urlS;
+	}
 
-    public String getUseMapS() {
-        return useMapS;
-    }
+	public String getUseMapS() {
+		return useMapS;
+	}
 
-    public String getWidthS() {
-        return widthS;
-    }
+	public String getWidthS() {
+		return widthS;
+	}
 
-    public boolean isHasAlt() {
-        return this.hasAlt;
-    }
+	public boolean isHasAlt() {
+		return this.hasAlt;
+	}
 
-    public boolean isHasHeight() {
-        return hasHeight;
-    }
+	public boolean isHasHeight() {
+		return hasHeight;
+	}
 
-    public boolean isHasLongDesc() {
-        return hasLongDesc;
-    }
+	public boolean isHasLongDesc() {
+		return hasLongDesc;
+	}
 
-    public boolean isHasUseMap() {
-        return hasUseMap;
-    }
+	public boolean isHasUseMap() {
+		return hasUseMap;
+	}
 
-    public boolean isHasWidth() {
-        return hasWidth;
-    }
+	public boolean isHasWidth() {
+		return hasWidth;
+	}
 
-    public boolean isInLink() {
-        return isInLink;
-    }
+	public boolean isInLink() {
+		return isInLink;
+	}
 
-    public boolean isMap() {
-        return isMap;
-    }
+	public boolean isMap() {
+		return isMap;
+	}
 
-    public void setHasHeight(boolean hasHeight) {
-        this.hasHeight = hasHeight;
-    }
+	public void setHasHeight(boolean hasHeight) {
+		this.hasHeight = hasHeight;
+	}
 
-    public void setHasWidth(boolean hasWidth) {
-        this.hasWidth = hasWidth;
-    }
+	public void setHasWidth(boolean hasWidth) {
+		this.hasWidth = hasWidth;
+	}
 
-    public void setHeightS(String heightS) {
-        this.heightS = heightS;
-    }
+	public void setHeightS(String heightS) {
+		this.heightS = heightS;
+	}
 
-    public void setWidthS(String widthS) {
-        this.widthS = widthS;
-    }
+	public void setWidthS(String widthS) {
+		this.widthS = widthS;
+	}
 }
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/PageData.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/PageData.java
index 2e0ed65..65b48f1 100644
--- a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/PageData.java
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/eval/html/statistics/PageData.java
@@ -16,9 +16,9 @@
 import java.util.Vector;
 
 import org.eclipse.actf.util.FileUtils;
-import org.eclipse.actf.util.xpath.XPathUtil;
 import org.eclipse.actf.visualization.eval.problem.IProblemItem;
 import org.eclipse.actf.visualization.eval.problem.IProblemItemVisitor;
+import org.eclipse.actf.visualization.internal.eval.XMLStringUtil;
 import org.w3c.dom.Element;
 import org.w3c.dom.html.HTMLImageElement;
 
@@ -153,7 +153,7 @@
 	}
 
 	private String getAttr(String name, String value) {
-		return ((name + "=\"" + XPathUtil.canonicalize(value) + "\" "));
+		return ((name + "=\"" + XMLStringUtil.canonicalize(value) + "\" "));
 	}
 
 	public int getSkipMainNum() {
diff --git a/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/XMLStringUtil.java b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/XMLStringUtil.java
new file mode 100644
index 0000000..2035fba
--- /dev/null
+++ b/plugins/org.eclipse.actf.visualization.eval/src/org/eclipse/actf/visualization/internal/eval/XMLStringUtil.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and Others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Shin SAITO - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.actf.visualization.internal.eval;
+
+
+/**
+ * Utility class to canonicalize String 
+ */
+public class XMLStringUtil {
+
+
+	/**
+	 * Canonicalize target String
+	 * 
+	 * @param targetS
+	 *            the target String
+	 * @return canonicalized String
+	 */
+	public static String canonicalize(String targetS) {
+		return (targetS.replaceAll("\\p{Cntrl}", "").replaceAll("&", "&amp;")
+				.replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(
+						"\"", "&quot;").replaceAll("\'", "&apos;"));
+	}
+
+}