所以我试图在标题中尽可能清楚地写出我的问题,但我会详细说明情况。目前在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之间添加变量。
这是一个明确的例子,用纯文字说明我是怎么想的。
<bodytext>
This is the Body Text
hi user_id, your code is user_code
</bodytext>
希望我已经很好地解释了我的问题。如果没有,请告诉我,我会尽力解决这个问题。
谢谢!
答案 0 :(得分: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-template:
<?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>