0

所以我试图在标题中尽可能清楚地写出我的问题,但我会详细说明情况。目前在java中,我正在尝试从我创建的电子邮件模板中获取信息。

获得电子邮件数据后,我需要将变量注入电子邮件内容的不同部分。

例如,我有 3 个用 xml 文件编写的不同电子邮件模板。etemplate1.xml、etemplate2、etemplate3。

到目前为止,我正在使用以下代码获取信息。

    String fm_subject = "";  // Formatted string of email subject
    String fm_bodytext = ""; // Formatted string of email body text
    String fm_bodytables = ""; // Formatted string of email body tables

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    org.w3c.dom.Document doc = dBuilder.parse(getServletContext().getResourceAsStream("/"+requestType+".xml"));
    doc.getDocumentElement().normalize();

    NodeList nList = doc.getElementsByTagName("emailtemplate");

        Node nNode = nList.item(0);

        if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;

            fm_subject = eElement.getElementsByTagName("subject").item(0).getTextContent();
            fm_bodytext = eElement.getElementsByTagName("bodytext").item(0).getTextContent();
            fm_bodytables = eElement.getElementsByTagName("bodytable").item(0).getTextContent();

注意:requestType = 将使用的模板

XML 电子邮件模板示例:

  <?xml version="1.0"?>
<emailtemplates>
    <emailtemplate>
        <subject>
        subject information


        </subject>
        <bodytext>

        This is the  Body Text


        </bodytext>
        <bodytable>

        This Body Tables



        </bodytable>
    </emailtemplate>
</emailtemplates>

我需要做的是用变量格式化我从 xml 文件中返回的数据。问题是,我不能只在返回数据的末尾添加一个变量。

示例代码:

user_id //示例变量

user_code //示例变量

fm_bodytext = eElement.getElementsByTagName("bodytext").item(0).getTextContent() + user_id + user_code;

这将始终将变量附加到正文信息的末尾。我需要在 xml 元素正文之间添加变量。

这是我想要的纯文本的一个清晰示例。

            <bodytext>

        This is the  Body Text

             hi user_id,  your code is user_code



        </bodytext>

希望我已经很好地解释了我的问题。如果没有,请告诉我,我会尽力解决这个问题。

谢谢 !

4

1 回答 1

1

您是否考虑过使用 XSLT 从您的模板中呈现新的 XML?请参阅http://www.w3schools.com/xsl/

示例类:

import java.io.ByteArrayInputStream;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.junit.Test;

public class XMLOutTest{

@Test
public void textXML() {
    String input = "<?xml version=\"1.0\"?>" + "<root><subject>my subject</subject><bodytext>my body text</bodytext>my body table<bodytable></bodytable></root>";
    try {
        StreamSource src = new StreamSource(new ByteArrayInputStream(input.getBytes()));
        StreamSource xslSrc = new StreamSource(this.getClass().getResourceAsStream("/xmltransform.xsl"));
        StreamResult result = new StreamResult(System.out);

        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer t = factory.newTransformer(xslSrc);
        t.transform(src, result);

    } catch (TransformerConfigurationException e) {
        e.printStackTrace();
    } catch (TransformerException e) {
        e.printStackTrace();
    }
}
}

你的 xsl 模板:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"></xsl:output>
    <xsl:template match="root">
        <emailtemplates>
            <emailtemplate>
                <subject>
                    <xsl:text>subject information</xsl:text>
                    <xsl:value-of select="./subject"></xsl:value-of>
            </subject>
            <bodytext>
                <xsl:text>This is the Body Text</xsl:text>
                <xsl:value-of select="./bodytext"></xsl:value-of>
            </bodytext>
            <bodytable>
                <xsl:text>This Body Tables</xsl:text>
                <xsl:value-of select="./bodytable"></xsl:value-of>
            </bodytable>
        </emailtemplate>
    </emailtemplates>
</xsl:template>

于 2013-11-01T12:42:48.223 回答