//xml与javabean
public class XMLBeanUtil {
public static Object fromXML(String xml, Class clazz) {
StringReader sr = new StringReader(xml);
JOXBeanReader reader = new JOXBeanReader(sr);
try {
return reader.readObject(clazz);
} catch (IOException exc) {
exc.printStackTrace();
return null;
} finally {
try {
reader.close();
sr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Returns an XML document.nbspString for the received bean
*/
public static String toXML(Object bean) {
StringWriter sw = new StringWriter();
JOXBeanWriter writer = new JOXBeanWriter(sw);
try {
writer.writeObject(beanName(bean), bean);
return sw.getBuffer().toString();
} catch (IOException exc) {
exc.printStackTrace();
return null;
} finally {
try {
sw.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Find out the bean class name
*/
private static String beanName(Object bean) {
String fullClassName = bean.getClass().getName();
String classNameTemp =
fullClassName.substring(
fullClassName.lastIndexOf(".") + 1,
fullClassName.length());
return classNameTemp.substring(0, 1) + classNameTemp.substring(1);
}
public static Object fromXML(String[] xml, Class clazz) {
StringBuffer sb = new StringBuffer();
sb.append("<root>");
for (int i = 0; i < xml.length; i++) {
if (xml[i] != null)
sb.append(removeRoot(xml[i]));
}
sb.append("</root>");
return fromXML(sb.toString(), clazz);
}
private static String removeRoot(String xml) {
xml = removeFirstTag(xml);
xml = removeLastTag(xml);
xml = removeTextValue(xml);
return xml;
}
private static String removeFirstTag(String xml) {
int length = xml.length();
int i = xml.indexOf(">");
if (i == -1) {
return "";
}
String firstTag = xml.substring(0, i + 1);
if (firstTag.endsWith("?>")) {
return removeFirstTag(xml.substring(i + 1, length));
} else if (firstTag.endsWith("/>")) {
return "";
} else {
return xml.substring(i + 1, length);
}
}
private static String removeLastTag(String xml) {
int length = xml.length();
int i = xml.lastIndexOf("<");
if (i == -1) {
return "";
}
return xml.substring(0, i);
}
private static String removeTextValue(String xmlString) {
String xml = xmlString.trim();
if (!xml.startsWith("<")) {
int index = xml.indexOf("<");
if (index == -1) {
xml = "";
} else {
xml = xml.substring(index, xml.length());
}
}
if (!xml.endsWith(">")) {
int index = xml.lastIndexOf(">");
if (index == -1) {
xml = "";
} else {
xml = xml.substring(0, index + 1);
}
}
return xml;
}
public static String addFields2XML(String xmlString, String fieldsString) {
String xml = xmlString.trim();
String fields = fieldsString.trim();
int length = xml.length();
// int i = xml.indexOf("/">");
// if (i == -1) {
// return xmlString;
// }
// String firstTag = xml.substring(0, i + 2);
int i = xml.lastIndexOf("</");
if (i == -1) {
return "";
}
String lastTag = xml.substring(i - 1, length);
xml = removeLastTag(xml);
StringBuffer sb = new StringBuffer();
sb.append(xml);
String s2 = removeRoot(fields);
s2 = removeRoot(s2);
sb.append(s2);
sb.append(lastTag);
return sb.toString();
}
public static String replaceFieldInXML(
String xmlString,
String fieldString) {
String xml = xmlString.trim();
String field = fieldString.trim();
int length = xml.length();
int i = xml.lastIndexOf("</");
if (i == -1) {
return "";
}
String lastTag = xml.substring(i - 1, length);
xml = removeLastTag(xml);
String fieldFirstTag = getFieldFirstTag(field);
String fieldLastTag = getFieldLastTag(field);
StringBuffer sb = new StringBuffer();
i = xml.indexOf(fieldFirstTag);
if (i != -1)
sb.append(xml.substring(0, i));
sb.append(field);
i = xml.indexOf(fieldLastTag);
if (i != -1){
xml = xml.substring(i + fieldLastTag.length(), xml.length());
sb.append(xml);
}
sb.append(lastTag);
return sb.toString();
}
private static String getFieldFirstTag(String fieldXmlString) {
String xml = fieldXmlString.trim();
int i = xml.indexOf(">");
if (i == -1) {
return fieldXmlString;
}
return xml.substring(0, i + 1);
}
private static String getFieldLastTag(String fieldXmlString) {
String xml = fieldXmlString.trim();
int length = xml.length();
int i = xml.lastIndexOf("<");
if (i == -1) {
return fieldXmlString;
}
return xml.substring(i, length);
}
public static void main(String args[]){
ProcessInput p=new ProcessInput();
String s=XMLBeanUtil.toXML(p);
System.out.println(s);
}
}