我有一个带有某些字段的类,例如
public class Abc
{
private String text;
public String Text
{
get { return this.text; }
set { this.text = value; }
}
}
存储过程返回该对象,我必须将其序列化为XML字符串,以将其与XSL文件一起显示。我使用此方法序列化对象
public static String SerializeObject(Object pObject)
{
try
{
String XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(pObject.GetType());
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.Unicode);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream) xmlTextWriter.BaseStream;
XmlizedString = UTF16ByteArrayToString(memoryStream.ToArray());
return XmlizedString.Trim();
}
catch (Exception e)
{
return null;
}
}
如果我对象的Text属性包含一些换行符\ n,则通过序列化将其删除并替换为空格。序列化后如何保留换行符?谢谢
[我试图改变方法,正如我在this答案中所见,我定义了一个模板来在我的XSL文件中调用:
<xsl:template name="replaceNL">
<xsl:param name="pText" select="string(.)"/>
<xsl:choose>
<xsl:when test="contains($pText, '
')">
<xsl:value-of select="substring-before($pText, '
')"/>
<br />
<xsl:call-template name="replaceNL">
<xsl:with-param name="pText" select="substring-after($pText, '
')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pText"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
在我的XSL中,我以这种方式调用模板:
<tr>
<td colspan="4">
<p style="padding-left:5px">
<xsl:call-template name="replaceNL">
<xsl:with-param name="pText" select="Contract/ContractDetail/DESC_NOTE"></xsl:with-param>
</xsl:call-template>
</p>
</td>
</tr>
在传递给XSL的字符串中,我可以通过这种方式输入文本:<DESC_NOTE>daFfF
ASFAFA
FGAGA</DESC_NOTE>
但是在输出中,我看不到模板所应用的更改,实际上,我看到的文本为“ daFfF br / ASFAFA br / FGAGA”,就像标记br /是文本的一部分一样。我缺少什么?