最近在作一个处理xml树的问题,我使用的是jdom
有个需求
String s= xml.BuildXML("123|100|wumin|", "//message/tel/amout/name/");
假如有一个字符串为//message/tel/amout/name/
要生成的结果是
<?xml version="1.0" encoding="GBK"?>
<Message>
<tel>123</tel>
<amout>100</amout>
<name>wumin</name>
</Message>
应该怎么作呢假如传入的xml定义还包括属性 //message/tel[@number='1']/amout/name
最后的结果为
<?xml version="1.0" encoding="GBK"?>
<Message>
<tel number=‘1’>123</tel>
<amout>100</amout>
<name>wumin</name>
</Message>
有个需求
String s= xml.BuildXML("123|100|wumin|", "//message/tel/amout/name/");
假如有一个字符串为//message/tel/amout/name/
要生成的结果是
<?xml version="1.0" encoding="GBK"?>
<Message>
<tel>123</tel>
<amout>100</amout>
<name>wumin</name>
</Message>
应该怎么作呢假如传入的xml定义还包括属性 //message/tel[@number='1']/amout/name
最后的结果为
<?xml version="1.0" encoding="GBK"?>
<Message>
<tel number=‘1’>123</tel>
<amout>100</amout>
<name>wumin</name>
</Message>
解决方案 »
- java基础问题 类中public域问题
- 何如把一个List<String>里的值,赋给另一个List
- 64位windows安装jdk失败,求教原因。
- java初学者提问
- 如何用java获取网络文件的大小
- 高手都来!1
- 线程组的线程之间的协同问题??
- 在线等::如何在程序中动态的添加jar包路径???
- 如何用JDK编译并运行一个工程项目程序???
- MouseListener和MouseMotionListener有什么区别吗?
- jtable中如果某列是自定义的编辑器和绘制器,那么单击这列时,jtable并不会获得焦点,这是为什么?
- 有一个字符串“1988-9-6”希望将它转化为Date型,请问如何输写代码,在线等待
import java.util.ArrayList;
import java.util.List;import javax.management.AttributeList;import org.dom4j.Document;
import org.dom4j.Element;
import org.jdom.Attribute;public class Test1 { public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
String value = "123|100|wumin|";
String tree = "//message/tel/amout/name/";
String treeAtt1 = "//message/tel[@number='1']/amout/name/";
String treeAtt2 = "//message/tel[@number='1'][@sumber='ew']/amout/name/";
String treeAtt4 = "//message/tel[@number='1'][@sumber='ew'][@country='china'][@people='chinese']/amout/name/";
Test1 hand = new Test1();
hand.makeXml(value, treeAtt4);
long end = System.currentTimeMillis();
System.out.println("This function cost me:" + (end - start) + "ms");
} //形成字符串。
public String makeXml(String xmlValue, String xmlTree) throws Exception {
List value = makeList(xmlValue, '|');
List node = makeList(xmlTree.substring(2, xmlTree.length()), '/');
Document doc = Mafioso.create();
Element root = doc.addElement((String) node.get(0));
for (int i = 0; i < value.size(); i++) {
String nodeValue = (String) value.get(i);
Object objNode = node.get(i + 1);
if (objNode instanceof String) {
root.addElement((String) objNode).setText(nodeValue);
} else {
List nodeList = (List) objNode;
String nodeName = (String) nodeList.get(0);
AttributeList attList = (AttributeList) nodeList.get(1);
Element ele = root.addElement((String) nodeList.get(0));
for (int k = 0; k < attList.size(); k++) {
Attribute att = (Attribute) attList.get(k);
ele.setAttributeValue(att.getName(), att.getValue());
}
ele.setText(nodeValue);
}
} try {
FileOutputStream fos = new FileOutputStream(
"G:\\05 月份\\0524\\bo.xml");
fos.write(Mafioso.format(doc.asXML(), null).getBytes());
} catch (Exception ex) {
ex.printStackTrace();
}
return doc.asXML();
} //为节点或者值equip成List。
public List makeList(String src, char c) {
List list = new ArrayList();
int xPoint = 0;
int count = 0;
while (xPoint < src.length()) {
count++;
int index = src.indexOf(c, xPoint);
String value = src.substring(xPoint, index);
Object objValue = makeObject(value);
list.add(objValue);
xPoint = index + 1;
if (count > 10)
break;
}
return list;
} //将每个节点进行处理,分有无attribute两种
public Object makeObject(String src) {
int xPoint = src.indexOf('@');
if (xPoint == -1)
return src;
String value = src.substring(0, xPoint - 1);
List list = new ArrayList();
list.add(value);
AttributeList attList = new AttributeList();
while (xPoint < src.length()) {
int index = src.indexOf(']', xPoint);
Attribute att = makeAttribute(src.substring(xPoint + 1, index));
attList.add(att);
xPoint = src.indexOf('@', index);
if (xPoint == -1) {
break;
}
}
list.add(attList);
return list;
} //对属性进行处理。
public Attribute makeAttribute(String src) {
int index = src.indexOf('=');
String name = src.substring(0, index);
String value = src.substring(index + 1).replaceAll("'", "");
Attribute att = new Attribute(name, value);
return att;
}
}我来凑个热闹来着。
这个程序凑合着可以用,不过呢,提供的字符串要有相应的约束。
约束得越紧,程序的可移植性就越好,否则,就要做相应的修改了。
I am GeorgeBest!
<?xml version="1.0" encoding="GBK"?>
<Message>
<public>
<tel>123</tel>
<tel>789</tel>
<amout>100</amout>
<amout>200.00</amout>
<name>wumin</name>
</public>
</Message>根据上述xml树,有一个xml字符串定义为 //Message/public/tel:2|//Message/public/amout:2|//Message/public/name|
要求最后得出的xml树为
<?xml version="1.0" encoding="GBK"?>
<Message>
<public>
<tel>789</tel>
<amout>200.00</amout>
<name>wumin</name>
</public>
</Message>
冒号后面的数字为取第几个节点,大侠可否指点一下?