/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* 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:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer.core.util;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Donald G. Dunne
*/
public class XmlUtil {
public static String getRootTag(String xmlStr) {
Matcher m;
m = Pattern.compile("^[\r\n \t]*<.*?>[\r\n \t]*<(.*?)>", Pattern.MULTILINE | Pattern.DOTALL).matcher(xmlStr);
if (m.find()) {
return m.group(1);
}
return "";
}
/**
* Returns <elementName>data</elementName> NOTE: data is not sent through AXml.textToXml
*/
public static String addTagData(String elementName, String data) {
return addTagData(elementName, data, false);
}
public static String addTagDataBoolean(String elementName, boolean data) {
return addTagData(elementName, data ? "true" : "false", false);
}
public static String addTagData(String elementName, String data, boolean newLine) {
String str = "<" + elementName + ">" + data + "</" + elementName + ">";
if (newLine) {
return str + "\n";
} else {
return str;
}
}
/**
* Parse <xmlRoot name="this.is.name" value="this.is.value"> and return name, value
*
* @param xmlRoot xml tag name
* @param xmlStr string containing xml
* @return String[]{name, value}
*/
public static String[] getNameValue(String xmlRoot, String xmlStr) {
String[] strs = new String[] {"", ""};
Matcher m;
m = Pattern.compile("<" + xmlRoot + " name=\"(.*?)\" value=\"(.*?)\" />",
Pattern.MULTILINE | Pattern.DOTALL).matcher(xmlStr);
if (m.find()) {
strs[0] = m.group(1);
strs[1] = m.group(2);
}
return strs;
}
public static String getNameValueXml(String xmlRoot, String name, String value) {
return String.format("<%s name=\"%s\" value=\"%s\"/>", xmlRoot, name, value);
}
public static String[] getTagDataArray(String xmlStr, String xmlRoot) {
List<String> data = new ArrayList<String>();
Matcher m;
m = Pattern.compile("<" + xmlRoot + ">(.*?)</" + xmlRoot + ">", Pattern.MULTILINE | Pattern.DOTALL).matcher(
xmlStr);
while (m.find()) {
data.add(xmlToText(m.group(1)));
}
return data.toArray(new String[data.size()]);
}
/**
* Returns data between <xmlRoot> and </xmlRoot> from xmlStr
*/
public static String getTagData(String xmlStr, String xmlRoot) {
String tags[] = getTagDataArray(xmlStr, xmlRoot);
if (tags.length > 0) {
return tags[0];
}
return "";
}
public static int getTagIntData(String xmlStr, String xmlRoot) {
String tags[] = getTagDataArray(xmlStr, xmlRoot);
if (tags.length > 0) {
String intStr = tags[0];
return (Integer.valueOf(intStr)).intValue();
}
return 0;
}
public static Boolean getTagBooleanData(String xmlStr, String xmlRoot) {
String tags[] = getTagDataArray(xmlStr, xmlRoot);
if (tags.length > 0) {
String intStr = tags[0];
return (intStr.equals("true") ? true : false);
}
return false;
}
/**
* Given text strings containing xml reserved characters, replace with valid xml representation characters > => & gt;
* < => & lt; & => & amp; ' => & apos; " => & quot;
*
* @param text text to be converted to valid XML representation characters
*/
public static String textToXml(String text) {
if (text == null || text.equals("")) {
return "";
}
String str = text;
str = str.replaceAll("&", "&");
str = str.replaceAll(">", ">");
str = str.replaceAll("<", "<");
str = str.replaceAll("'", "'");
str = str.replaceAll("\"", """);
return str;
}
/**
* Given xml strings containing xml reserved characters, replace with displayable characters > <= & gt; < <= & lt; &
* <= & amp; ' <= & apos; " <= & quot;
*/
public static String xmlToText(String xml) {
if (xml == null || xml.equals("")) {
return "";
}
String str = xml;
str = str.replaceAll(">", ">");
str = str.replaceAll("<", "<");
str = str.replaceAll("'", "'");
str = str.replaceAll(""", "\"");
str = str.replaceAll("&", "&");
return str;
}
}