0

そのため、タイトルに問題をできるだけ明確に書こうとしましたが、状況について詳しく説明します。現在Javaで、作成した電子メールテンプレートから情報を取得しようとしています。

電子メール データを取得したら、電子メール コンテンツのさまざまな部分に変数を挿入する必要があります。

たとえば、xml ファイルに記述された 3 つの異なる電子メール テンプレートがあります。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>

うまくいけば、私は自分の問題を十分に説明しました。そうでない場合はお知らせください。問題の解決に努めます。

ありがとう !

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 に答える