XML数据已排序

时间:2009-10-20 12:53:23

标签: java

我正在使用Java构建XML代码。请参阅我的代码段。

    Document document = null;
    String xml = "";
    ReportsDAO objReportsDAO = null;
    try 
    {
        logger.info("Getting XML data for Consumable Report Starts...");
        objReportsDAO = new ReportsDAO();

        List consumableDTOLst = objReportsDAO.getConsumableData(issuedBy, issuedTo, employeeType, itemCode, itemName, className, transactionFromDate, transactionToDate, machineCode, workOrderNumber, jobName, customerId);
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = factory.newDocumentBuilder();
        document = builder.newDocument();
        Element rootElmnt = (Element) document.createElement("items");  
        document.appendChild(rootElmnt);

        Element elmt = null;
        ConsumableDTO objConsumableDTO = null;
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

        for (int i = 0; i < consumableDTOLst.size(); i++) 
        {
            objConsumableDTO = (ConsumableDTO)consumableDTOLst.get(i);
            elmt =  (Element) document.createElement("item");
            elmt.setAttribute("IssuedBy", objConsumableDTO.getIssuedBy());
            elmt.setAttribute("IssuedTo", objConsumableDTO.getIssuedTo());
            elmt.setAttribute("EMPLOYECADRE", objConsumableDTO.getEmployeeType());
            elmt.setAttribute("ITEMCODE", objConsumableDTO.getItemCode());
            elmt.setAttribute("ITEMNAME", objConsumableDTO.getItemName());
            elmt.setAttribute("ITEMCLASS", objConsumableDTO.getClassName());
            elmt.setAttribute("DATE", sdf.format(objConsumableDTO.getTransactionDate()));
            elmt.setAttribute("machineCode", objConsumableDTO.getMachineCode());
            elmt.setAttribute("JOB", objConsumableDTO.getJobName());
            elmt.setAttribute("WORKORDERNUMBER", objConsumableDTO.getWorkOrderNumber());
            elmt.setAttribute("CustomerName", objConsumableDTO.getCustomerName());
            elmt.setAttribute("RoleName", objConsumableDTO.getGroupName());
            elmt.setAttribute("VendorName", objConsumableDTO.getVendorName());
            elmt.setAttribute("QTY", String.valueOf(Math.abs(objConsumableDTO.getQuantity())));
            elmt.setAttribute("unitDescription", objConsumableDTO.getUnitDescription());
            elmt.setAttribute("RATEPERQTY", String.valueOf(objConsumableDTO.getRate()));
            elmt.setAttribute("AMOUNT", String.valueOf(objConsumableDTO.getAmount()));
            rootElmnt.appendChild(elmt);
        }

问题是所有属性都是自动排序的。如何限制它?

例如,

<empdetails age="25" name="john"/>

但我想要

<empdetails name="john" age="25"/>

请提出一些建议。

谢谢,

2 个答案:

答案 0 :(得分:4)

重复:Order of XML attributes after DOM processing

来自the accepted answer

  

查看XML的3.1节   建议。它说,“请注意   属性规范的顺序   在start-tag或empty-element标签中   没有意义。“

     

如果一件软件需要   要显示的XML元素上的属性   按照特定的顺序,该软件是   不处理XML,它正在处理   看起来像表面的文字   XML。它需要修复。

     

如果无法修复,你必须这样做   生成符合它的文件   要求,你不能可靠使用   用于生成这些的标准XML工具   文件。

归功于Robert Rossney

答案 1 :(得分:0)

XML属性有序。它们的输出方式取决于您使用的XML输出机制。

因此,您可以编写输出机制,但不应依赖任何消费者以有序的方式使用它们。如果您需要/需要排序,您应该在此节点下指定一系列XML元素。