java – 命令元素的DOM属性序列[复制]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 命令元素的DOM属性序列[复制],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3924字,纯文字阅读大概需要6分钟。
内容图文
![java – 命令元素的DOM属性序列[复制]](/upload/InfoBanner/zyjiaocheng/813/2ec271a667d7445697130f3f568dbbf0.jpg)
参见英文答案 > Order of XML attributes after DOM processing 11个
之前在stackoverflow中已经问过这个问题:
这真的不可能吗?
使用insertBefore我想订购一个元素的属性序列.具体来说,在下面的示例中,如何更改属性的顺序?从节点使用setAttribute会更容易吗?在任何一种情况下,顺序似乎都是自动发生的,尽管insertBefore肯定意味着可以指定顺序.
码:
package xml;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class Main {
private static final Logger logger = Logger.getLogger(Main.class.getName());
/**
* catches errors
*/
public Main() {
try {
createDoc();
} catch (ParserConfigurationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (TransformerConfigurationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (TransformerException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void createDoc()
throws ParserConfigurationException, TransformerConfigurationException, TransformerException, IOException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setIgnoringComments(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
doc.setXmlStandalone(true);
Comment comment = doc.createComment(" nodes ");
doc.appendChild(comment);
Element root = doc.createElement("foo");
root.setAttribute("Version", "1.0");
doc.appendChild(root);
Element bar = doc.createElement("bar");
Element baz = doc.createElement("baz");
Element child1 = doc.createElementNS("foo", "bar");
child1.setPrefix("prefix1");
Attr attr1 = doc.createAttribute("attr1");
attr1.setValue("val1");
Element child2 = doc.createElementNS("foo", "bar");
child2.setPrefix("prefix2");
Attr attr2 = doc.createAttribute("attr2");
attr2.setValue("val2");
baz.setAttributeNode(attr2);
baz.setAttributeNode(attr1);
root.appendChild(bar);
bar.appendChild(baz);
writeToFile(doc);
}
private void writeToFile(Document doc)
throws TransformerConfigurationException, TransformerException, IOException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", new Integer(2));
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.VERSION, "1.0");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
logger.log(Level.INFO, "\n{0}", sw.toString());
result = new StreamResult(new FileWriter("test.xml"));
transformer.transform(source, result);
}
public static void main(String args[]) {
Main main = new Main();
}
}
解决方法:
XML元素的属性的排序不是XML information set的一部分,因此实现(包括DOM,解析器和解析器)没有义务保留它.
实际上,这意味着它是关于您是否可以通过DOM API控制属性的顺序(例如,使用insertBefore)的具体实现,并且具体实现是否将在转换之间保留排序.
我的建议是更改您的应用程序,使其不依赖于XML属性排序.
内容总结
以上是互联网集市为您收集整理的java – 命令元素的DOM属性序列[复制]全部内容,希望文章能够帮你解决java – 命令元素的DOM属性序列[复制]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。