Java生成XML后,节点属性会自动排序,怎么让它不自动排序
问题如题,描述如下:…………
Element content1 = document.createElement("person1");
content1.setAttribute(new String("name"), "aaaa");
content1.setAttribute(new String("age"), "1222");
content1.setAttribute(new String("email"), "eejhj");
root.appendChild(content1);
…………
依次添加属性 name 、 age 、email
最后输出的属性顺序如下:
<person1 age="1222" email="eejhj" name="aaaa" />
Java自动将属性按字母顺序排序了。怎么解决这个问题?
注:工作内容需要不自动排序!!!
--------------------编程问答-------------------- 这个,好像都是会默认排序的。应该没什么影响吧?
--------------------编程问答-------------------- 取值是不会有影响,这个我知道的。
问题就是我最后说的,由于某些功能,需要涉及到不能让他自动排序。
在网上找了很久,没有找到可行的方法
没有能解决么 --------------------编程问答-------------------- package xml;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jdom.Attribute;
import org.jdom.Comment;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class JDomOutput
{
public static void main(String[] args) throws IOException
{
//创建文档
Document document = new Document();
//创建根元素
Element people = new Element("people");
//把根元素加入到document中
document.addContent(people);
//创建注释
Comment rootComment = new Comment("将数据从程序输出到XML中!");
people.addContent(rootComment);
//创建父元素
Element person1 = new Element("person");
//把元素加入到根元素中
people.addContent(person1);
//设置person1元素属性
person1.setAttribute("id", "001");
Attribute person1_gender = new Attribute("gender", "male");
person1.setAttribute(person1_gender);
Attribute person1_aaa = new Attribute("aaa", "bbb");
person1.setAttribute(person1_aaa);
Element person1_name = new Element("name");
person1_name.setText("刘德华");
person1.addContent(person1_name);
Element person1_address = new Element("address");
person1_address.setText("香港");
person1.addContent(person1_address);
Element person2 = new Element("person");
people.addContent(person2);
person2.setAttribute("id", "002").setAttribute("gender","male");//添加属性,可以一次添加多个属性
Element person2_name = new Element("name");
person2_name.setText("林志颖");
person2.addContent(person2_name);
Element person2_address = new Element("address");
person2_address.setText("台湾");
person2.addContent(person2_address);
//设置xml输出格式
Format format = Format.getPrettyFormat();
format.setEncoding("utf-8");//设置编码
format.setIndent(" ");//设置缩进
//得到xml输出流
XMLOutputter out = new XMLOutputter(format);
//把数据输出到xml中
out.output(document, new FileOutputStream("d:\\jdom.xml"));//或者FileWriter
}
}
--------------------编程问答-------------------- 与楼主一起期待答案 --------------------编程问答-------------------- 你用的是jdom吧? 换成dom4j 就可以了 --------------------编程问答-------------------- 如果某些原因不能换成dom4j, 那么我告诉你我的做法。。jdom的属性顺序是按照26位英文字母排序的,所以,在你知道你节点个数并且不超过26位的情况下。。你可以这样,,比如你的三个属性name,age,email
你插入的时候就插入 A__name B__age C__email 最后生成DOM之后。。转成String。。。然后用正则表达式 把 [字母__属性名字] 替换成 [属性名字] 前提是你最后的返回结果只需要string。。如果你需要Document类型 就不行了。。
据我所知。。Dom解析属性和顺序应该没有关系。。除非特殊需求。。是解析定长的String 对属性顺序有要求。。所以我认为你接口返回的应该是个String类型。。如果用不上,全当我废话啊。 --------------------编程问答-------------------- String str = “<test A__name='aa' B__age='12' C__email='111'><test>”;
Pattern pattern = Pattern.compile("\\s\\w{1}__\\w{1,}=");
Matcher match = pattern.matcher(ismString);
while(match.find()) {
String result = match.group();
str = str.replaceAll(result, " " + result.substring(4, result.length()));
}
补充:Java , Java SE