1

XSLテンプレートは、2時間前に初めて見ただけなので、よくわかりません。

私は次のテンプレートを持っています:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:FormData="ext:FormVal" 
     xmlns:FormUrl="ext:UrlFinder"                    
     >
  <xsl:param name="note"/>
  <xsl:param name="title"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>EW Email Notification- File Note insertion Failed</title>
      </head>
      <body>
        <p>
          Failed to insert File note for form with refrence - <xsl:value-of select="FormData:get_RefFormId()" /> <br/>
          <a>
            <xsl:attribute name="href">
              <xsl:value-of select="FormUrl:get_RootUrl()"></xsl:value-of>FormAction/ViewForm?formId=<xsl:value-of select="FormData:get_FormId()"></xsl:value-of>
            </xsl:attribute>Click here </a> to open the form.
        </p>
        <p>
          Please insert this file note manually.
        </p>
        <p>
          <h3>
            Title:
          </h3>
          <out>          <xsl:value-of select="$title"></xsl:value-of>
          </out>

        </p>
        <p>
          <h3>
            Note:
          </h3>
         <xsl:value-of select="$note"></xsl:value-of>
        </p>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

そのほとんどは他の誰かによって書かれました。noteおよびtitleパラメータを追加しました。しかし、何らかの理由で、それらは印刷出力に表示されません。

ただし、FormData:get_FormId()動作します。

私は次のような変数を渡します:

dictionary["note"] = note;
dictionary["title"] =title;
dictionary["ext:FormVal"] = formVal;
dictionary["ext:UrlFinder"] = urlFinder;
var objxslt = new XslCompiledTransform();

objxslt.Load(Helper.GetEmbeddedXmlResource(templateAssembly, templateName));

var xmldoc = new XmlDocument();
xmldoc.AppendChild(xmldoc.CreateElement("DocumentRoot"));

XPathNavigator xpathnav = xmldoc.CreateNavigator();
var xslarg = new XsltArgumentList();

foreach (DictionaryEntry entry in dictionary)
{
    xslarg.AddExtensionObject(entry.Key.ToString(), entry.Value);
}

var emailbuilder = new StringBuilder();
var xmlwriter = new XmlTextWriter(new System.IO.StringWriter(emailbuilder));
objxslt.Transform(xpathnav, xslarg, xmlwriter, null);

var xemaildoc = new XmlDocument();
xemaildoc.LoadXml(emailbuilder.ToString());

XmlNode titlenode = xemaildoc.SelectSingleNode("//title");
string subjecttext = titlenode.InnerText;

XmlNode bodynode = xemaildoc.SelectSingleNode("//body");
string bodytext = bodynode.InnerXml;

変数bodytextにはすべてのテンプレートが含まれていますが、パラメーターが出力されると予想される空白があります。

notetitleパラメータが出力に表示されない理由を特定するのを手伝ってくれる人はいますか?

4

1 に答える 1

1

OK、これが私がしたことです。note文字列をtitle直接渡す代わりに、クラスを作成しました。

public class InsertFileNoteContainer
{
    public String Note { get; set; }
    public String Title { get; set; }
}

そして、これをキー付きの辞書に入れましたext:IFC

テンプレートでは、次のようにしました。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:FormData="ext:FormVal" 
     xmlns:FormUrl="ext:UrlFinder" 
     xmlns:Container="ext:IFC"          
     >

<xsl:value-of select="Container:get_Title()"></xsl:value-of>

<xsl:value-of select="Container:get_Note()"></xsl:value-of>

私はXSLテンプレートを初めて使用するため、なぜこれが機能するのかわかりません。文字列パラメータの使用が失敗した場合に、ここでクラスを導入することが機能する理由を誰かが理解できる場合は、私に知らせてください。

于 2012-08-09T18:24:30.887 に答える