将我自己的标签更改为XML

时间:2015-07-11 07:52:10

标签: java xml

我有一个文本编辑器,用户可以在其中输入如下文字:

  

[[PAYMENTS_N]]你必须在[[date]]之前支付[[amount]] $。[[/ PAYMENTS_N]]   [[PAYMENTS_Z]]你没有及时支付[[债务]] $:[[ddate]]。[[/ PAYMENTS_Z]]

还有XML文件,如下所示:

<DATA_NZ><USER><ID>12345</ID><COMP_NZ><COMP>
<STATUS>Z</STATUS>
<AMOUNT_NZ>128.01</AMOUNT_NZ>
<DATE_NZ>28.05.2015</DATE_NZ>

<STATUS>N</STATUS>
<AMOUNT_NZ>12.32</AMOUNT_NZ>
<DATE_NZ>21.09.2015</DATE_NZ>

<STATUS>N</STATUS>
<AMOUNT_NZ>12.32</AMOUNT_NZ>
<DATE_NZ>20.10.2015</DATE_NZ>
</COMP></COMP_NZ></USER></DATA_NZ>

现在我想将编辑器中的文本更改为:

  

请记住您的下次付款:   您必须在2015年9月21日之前支付12.32美元。   你必须在20.10.2015之前支付12.32美元。

     

您没有按时支付128.01美元:2015年5月28日。

我有这段代码:

public void parseTags(String content) {
    String nOpenTag, nCloseTag;
    String zOpenTag, zCloseTag;
    String dnTag, knTag, dzTag, kzTag;

    nOpenTag = "[[PAYMENTS_N]]";
    nCloseTag = "[[/PAYMENTS_N]]";

    zOpenTag = "[[PAYMENTS_Z]]";
    zCloseTag = "[[/PAYMENTS_Z]]";

    dnTag = "[[amount]]";
    knTag = "[[date]]";
    dzTag = "[[debt]]";
    kzTag = "[[ddate]]";

    String textToExtract = "";
    String textToExtract = "";
    String textToReplace = "";
    String parsedContent = content;//; = content;
    if (content.contains(nOpenTag) || content.contains(zOpenTag)) {
        for (int i = 0; i < getXMLContainer("SZUK_XM4.XML").getUsers().size(); i++) {
            if (getXMLContainer("SZUK_XM4.XML").getUsers().get(i) != null) { //
                contact = consentService.findByContactTypeAndIdNumber(ContactType.EMAIL, getXMLContainer("SZUK_XM4.XML").getUsers().get(i).getIdNumber());
                payments = getXMLContainer("SZUK_XM4.XML").getUsers().get(i).getPaymentContainer().getPayments();
                if (contact.size() > 0) {
                    StringBuilder strB = new StringBuilder();
                    StringBuilder strB2 = new StringBuilder();
                    String textToReplace;
                    for (int c = 0; c < contact.size(); c++) {
                        strB.setLength(0);
                        for (int p = 0; p < payments.size(); p++) {
                            if (payments.get(p).getStatus().contains("N")) {
                                textToExtract = content.substring(content.indexOf(nOpenTag) + nOpenTag.length(), content.indexOf(nCloseTag));
                                textToReplace = textToExtract.replace(dnTag, "Day " + payments.get(p).getPaymentDate());
                                textToReplace = textToReplace.replace(knTag, "Amount " + payments.get(p).getPaymentAmount());
                                strB.append(textToReplace);
                                parsedContent = content.replace(textToExtract, strB.toString());
                            }

                            if (payments.get(p).getStatus().contains("Z")) {
                                textToExtract = parsedContent.substring(parsedContent.indexOf(zOpenTag) + zOpenTag.length(), parsedContent.indexOf(zCloseTag));
                                textToReplace = textToExtract.replace(dzTag, "Day " + payments.get(p).getPaymentDate());
                                textToReplace = textToReplace.replace(kzTag, "Amount " + payments.get(p).getPaymentAmount());
                                strB2.append(textToReplace);
                                parsedContent = parsedContent.replace(textToExtract, strB2.toString());
                            }
                        }

                        mailService.sendTemplateMail(contact.get(c).getContact(), parsedContent);

                    }
                }
            }
        }
    }
}

此代码应该在具有XML的给定ID的数据库用户中找到。 如果用户存在,则它会读取文本编辑器之间的所有数据并从文本编辑器中替换[[TAGS]]。一切都完成后,它应该发送一封包含替换文本的电子邮件。

问题是它发送的文本未正确替换。它给出了

  

请记住您的下一笔付款:您必须先支付12.32美元   2015年9月21日。你必须在20.10.2015之前支付12.32美元。

     

你没有及时支付[[债务]] $:[[ddate]]。

看到最后一行的差异?

如果重要的话,我正在使用JAXB来读取XML。

希望你能帮助我!感谢。

1 个答案:

答案 0 :(得分:0)

取代:

parsedContent = content.replace(textToExtract, strB.toString());

使用:

parsedContent = parsedContent.replace(textToExtract, strB.toString());