【问题标题】:XML Data is sortedXML 数据已排序
【发布时间】:2009-10-20 12:53:22
【问题描述】:

我正在使用 Java 构建 XML 代码。查看我的代码 sn-p。

    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"/>

请提出一些想法。

谢谢,

【问题讨论】:

    标签: java


    【解决方案1】:

    重复:Order of XML attributes after DOM processing

    来自the accepted answer

    查看 XML 的第 3.1 节 推荐。它说:“请注意, 属性规范的顺序 在开始标签或空元素标签中是 不重要。”

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

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

    感谢Robert Rossney

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-20
        • 2011-07-10
        • 1970-01-01
        • 2014-06-30
        • 2018-10-18
        • 2011-11-06
        相关资源
        最近更新 更多