Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义dom中属性的顺序_Java_Dom - Fatal编程技术网

Java 定义dom中属性的顺序

Java 定义dom中属性的顺序,java,dom,Java,Dom,我目前正在处理DOM,我想知道如何更改标记数据的位置 比如说 我创建了以下元素: propElement = document.createElement("prop"); 道具正在打开标签 然后 问题是,尽管我将set方法name2放在name1之后,但我会在标记name2中看到name1之前 我怎样才能更改订单 (注意:我使用的是Java DOM API,不是JavaScript。)你不能,元素属性的顺序并不重要。事实上,在活动DOM中,没有顺序。顺序似乎只与DOM的序列化形式(例如HT

我目前正在处理DOM,我想知道如何更改标记数据的位置 比如说

我创建了以下元素:

propElement = document.createElement("prop");
道具正在打开标签

然后

问题是,尽管我将set方法name2放在name1之后,但我会在标记name2中看到name1之前

我怎样才能更改订单


(注意:我使用的是Java DOM API,不是JavaScript。)

你不能,元素属性的顺序并不重要。事实上,在活动DOM中,没有顺序。顺序似乎只与DOM的序列化形式(例如HTML标记等)相关。即使如此,这个顺序也没有任何意义,除了与无效文本相关的意义(下文将详细介绍)

属性基本上是对象(它们所附加到的DOM元素)的简单属性。它们绝对没有顺序,事实上,它们在DOM中的表示是一个“…不以任何特定顺序维护”的

记住DOM描述的是对象模型,这一点很重要。DOM的序列化形式可以是文本形式(例如,定义DOM的HTML文档),但DOM不是文本形式。在HTML文档中,由于它是线性文本(从上到下,从左到右),定义一个属性的文本自然必须在描述另一个属性的文本之前,但这并不意味着结果DOM对象中的属性有任何顺序,因为它们根本没有顺序。因此:

<div a="1" b="2">...</div>
…产生与此代码完全相同的对象:

obj.b = 2;
obj.a = 1;
…提供的
a
b
实际上是简单的字段(不是可能有副作用的隐藏函数调用),这对于DOM中的属性是正确的

DOM的文本(序列化)形式中的属性顺序有一种很重要的方式,它只与无效的文本相关:如果多次指定同一属性,则只使用给定的第一个值,因为多次指定同一属性是无效的。这些值不会合并,后续值不会覆盖前一个值。只使用第一个

因此,此无效HTML:

<div class="foo" class="bar">...</div>
。。。

…实际上导致
div
“bar”
根本不存在)。但这只是处理无效序列化表单的应对机制。

@FedorE:好的。答案没有改变(不管您使用什么语言,属性的顺序在DOM中仍然不重要),但这解释了问题上的标记。:-)你确定吗?因为现在我看到文件的顺序是字母顺序等,也许我需要以不同的方式创建文件?@FedorE:是的,我确定。看。特别要注意的是,属性在内存中的表示形式是“…不以任何特定顺序维护”。您使用的特定工具可能会以某种序列化格式按字母顺序放置属性,但这与DOM无关。元素上的属性只是元素的无序属性。您好,谢谢您的快速重播!!!我只是为属性设置了我喜欢的顺序,例如propElement.setAttribute(“b”,“b”);setAttribute(“a”,“a”)和顺序改为字母顺序,我在IE和chrome中打开文件,使用DOMSource source=new DOMSource(this.document);transformer.setOutputProperty(OutputKeys.INDENT,“是”);也许有问题?@FedorE:再说一次:元素中的属性没有顺序。订单无法“更改”,因为它不存在。我再清楚不过了。当您试图指令或依赖元素上属性的顺序时,您不需要执行任何操作,因为它们没有顺序。
obj.a = 1;
obj.b = 2;
obj.b = 2;
obj.a = 1;
<div class="foo" class="bar">...</div>