一个根据字符串生成xml树的问题!!

kiss1998wm 2006-05-18 05:37:00
最近在作一个处理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>
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiss1998wm 2006-05-31
  • 打赏
  • 举报
回复
我已经解决了,麻烦了
TONYBLARED 2006-05-30
  • 打赏
  • 举报
回复
哎呀,自己多动动脑子呀,别什么都闷着头发问/
或者你应该提提你的看法,你的思路..
kiss1998wm 2006-05-30
  • 打赏
  • 举报
回复
还有一个比较难的问题
<?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>
冒号后面的数字为取第几个节点,大侠可否指点一下?
kiss1998wm 2006-05-26
  • 打赏
  • 举报
回复
楼上的能留个qq吗?
TONYBLARED 2006-05-26
  • 打赏
  • 举报
回复
17894322
TONYBLARED 2006-05-26
  • 打赏
  • 举报
回复
很少用QQ。
TONYBLARED 2006-05-24
  • 打赏
  • 举报
回复
package com.pss.xml.dom;

import java.io.FileOutputStream;
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!
kiss1998wm 2006-05-24
  • 打赏
  • 举报
回复
怎么没有人帮助我呀:)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧