java - 使用 JDOM 在 Java 中构建包含我的 FIX 订单的 .XML 文件

标签 java xml jdom-2

我编写了一个发送 FIX 订单的简单方法。

我有一个小问题,存储的第一个 ClOrdID 是 1,下一个是 11,然后是 21,依此类推。我希望第一个元素为 0 或 1,然后是 2,3 等...

我的代码有什么问题吗?

private static void sendSELLOrderSingle(String account,
        String symbol, String securityID, String securityExchange,
        double price, double orderQty) throws SessionNotFound,
        JDOMException, IOException {

    quickfix.fix42.NewOrderSingle order = new quickfix.fix42.NewOrderSingle();

    SessionID sessionId = (SessionID) initiator.getSessions().get(0);



    order.set(new TransactTime(new Date(0)));
    order.set(new HandlInst('1'));

    order.set(new Account(account));
    order.set(new Symbol(symbol));
    order.set(new SecurityID(securityID));
    order.set(new SecurityExchange(securityExchange));
    order.set(new Price(price));
    order.set(new OrdType(OrdType.LIMIT));
    order.set(new Side(Side.SELL));
    order.set(new OrderQty(orderQty));



    // POST TRADE ACTIVITY

    org.jdom2.Document doc = new org.jdom2.Document();

    FileInputStream fis = new FileInputStream("XML/historical orders.xml");
    // create a sax builder to parse the document
    SAXBuilder sb = new SAXBuilder();
    // parse the xml content provided by the file input stream and create a
    // Document object
    doc = sb.build(fis);
    // get the root element of the document

    org.jdom2.Element root = doc.getRootElement();
    fis.close();

    org.jdom2.Element clOrdID1 = new org.jdom2.Element("ClOrdID");
    clOrdID1.setText((Integer.toString(root.getChildren().size())) + 1);
    root.addContent(clOrdID1);

    order.set(new ClOrdID((Integer.toString(root.getChildren().size())) + 1));

    org.jdom2.Element account1 = new org.jdom2.Element("Account");
    account1.setText(account);
    clOrdID1.addContent(account1);

    org.jdom2.Element symbol1 = new org.jdom2.Element("Symbol");
    symbol1.setText(symbol);
    clOrdID1.addContent(symbol1);

    org.jdom2.Element securityID1 = new org.jdom2.Element("SecurityID");
    securityID1.setText(securityID);
    clOrdID1.addContent(securityID1);

    org.jdom2.Element securityExchange1 = new org.jdom2.Element(
            "SecurityExchange");
    securityExchange1.setText(securityExchange);
    clOrdID1.addContent(securityExchange1);

    org.jdom2.Element price1 = new org.jdom2.Element("Price");
    price1.setText(Double.toString(price));
    clOrdID1.addContent(price1);

    org.jdom2.Element ordType = new org.jdom2.Element("Order_Type");
    ordType.setText("Limit");
    clOrdID1.addContent(ordType);

    org.jdom2.Element side = new org.jdom2.Element("Side");
    side.setText("SELL");
    clOrdID1.addContent(side);

    org.jdom2.Element ordQnty = new org.jdom2.Element("Order_Quantity");
    ordQnty.setText(Double.toString(orderQty));
    clOrdID1.addContent(ordQnty);

    try {
        // get object to see output of prepared document
        XMLOutputter xmlOutput = new XMLOutputter();

        // passsed System.out to see document content on console
        xmlOutput.output(doc, System.out);

        // passed fileWriter to write content in specified file

        xmlOutput.output(doc, new FileWriter("XML/historical orders.xml"));

    } catch (IOException io) {
        System.out.println(io.getMessage());
    }


    Session.sendToTarget(order, sessionId);
}

我的 xml 文件: The xml file

最佳答案

clOrdID1.setText((Integer.toString(root.getChildren().size())) + 1);

上面的代码会获取元素个数的大小(例如1),然后将其转换为字符串,现在是"1",然后会进行"1"+ 1,即字符串连接,所以会得到"11"

您想要做的是将 +1 移到 toString() 方法内部,并使其相加而不是字符串连接:

clOrdID1.setText((Integer.toString(1 + root.getChildren().size())));

已排序!

关于java - 使用 JDOM 在 Java 中构建包含我的 FIX 订单的 .XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733089/

相关文章:

java - 如何使用计数器创建不同的 xml 标签?

xml - 我们可以更改 JDOM 中的 XML 命名空间变量名称吗?

java - 如何在 hibernate 中按条件删除?

java - Android Studio 在记事本中打开 xml 文件

java - 限制 html JLabel 中的行数

c++ - 使用 PugiXML 进行 XML 解析,无限循环

java - Apache Camel - Groovy 脚本

c# - 找到一个有 ID 的节点

xml - 选择前 N 个元素

java - 使用 jdom2 将响应字符串解析为 xml