通过XML/XSLT处理链保留空白 用户在浏览器中的多行文本框中键入文本 数据作为XML片段的一部分存储在SQL Server XML列中 XML代码片段后来被合并到一个更大的XML文档中 文档通过XSLT处理为HTML电子邮件 收件人应看到原始换行符
我试过:通过XML/XSLT处理链保留空白 用户在浏览器中的多行文本框中键入文本 数据作为XML片段的一部分存储在SQL Server XML列中 XML代码片段后来被合并到一个更大的XML文档中 文档通过XSLT处理为HTML电子邮件 收件人应看到原始换行符,xml,xslt,whitespace,Xml,Xslt,Whitespace,我试过: CDATA(被SQL删除) 在输出中标记NL字符的注释和编码 数据中编码的标记(不会在HTML中解码) 这可以在不重新构建所有内容的情况下完成吗 根据注释中的请求,以下是实际代码: XSL XSLT中输入数据的变化 以前的工作:助理,波士顿Test1Test2 以前的工作:波士顿
测试一及#xA;测试2 以前的工作:波士顿&;书信电报;br/&;燃气轮机;Test1br/Test2 相应的XSLT结果 以前的工作:助理,BostonTest1测试2 以
- CDATA(被SQL删除)
在输出中标记NL字符的注释和编码- 数据中编码的
标记(不会在HTML中解码)
XSLT中输入数据的变化
以前的工作:助理,波士顿
Test1
Test2
以前的工作:波士顿
测试一及#xA;测试2
以前的工作:波士顿&;书信电报;br/&;燃气轮机;Test1br/Test2
以前的工作:助理,BostonTest1测试2
以前的工作:波士顿
测试一及#xA;测试2
以前的工作:波士顿&;书信电报;br/&;燃气轮机;Test1br/Test2
所有这些元素在Outlook中都无法正确呈现。请尝试在文本中嵌入转义的
元素,并将元素的禁用输出转义属性设置为yes
:
<MemoComment>Previous job: Associate, Boston<br/>Test1<br/>Test2</MemoComment>
<xsl:value-of select="//MemoComment" disable-output-escaping="yes" />
以前的工作:助理,Bostonbr/Test1br/Test2
问题的原因是您使用了
当您实际需要时
仅选择所选节点的字符串值。您实际上想要的是复制整个节点,包括它包含的元素。然后,您可以将数据保存为格式化的XHTML代码段,而无需元素语法转义(输入列表中的格式编号1)
通常不鼓励使用disabe output escaping=“yes”
,因为这会导致输出格式错误的XML。而且,所有XSLT处理器都没有实现此功能,因为它实际上只在文档序列化时生效,如果输出文档作为数据结构从处理器传递过来,则可能没有任何效果。我不确定SQL server如何处理XML数据,但是,如果在使用XSLT转换之前,您在XML文件中保留了空格,那么也可以在样式表中保留它们。4)通过XSLT将文档处理为HTML电子邮件5)收件人希望看到原始换行符。那么,您的最终结果是带有换行符的HTML吗?这是行不通的,因为HTML压缩了空格,换行符被转换成空格whitespace@khachik,空白在XML处理中丢失,甚至在XSLT开始查看之前it@cdonner,空白在什么地方丢失了?另外,如果
标记没有变成实际的换行符,我会怀疑XSLT正在逃避它们;您需要向我们展示XSLT的相关部分以及它的输出示例,才能确定这一点。它只负责输出端。当我按照您的建议手动将转义的
元素放入XML文档进行转换时,结果很好。但当我以编程方式将其放入数据库时,也会转义与,从而导致&;书信电报;等,但没有正确地进行替换。你还有其他的见解吗?这完全取决于管道中的哪个步骤实际上是对符号和字符进行编码。这些已经在数据库中转义了吗?如果不是,则在构建转换后的XML文档时,您的数据访问层可能会对它们进行编码。是的,它们会在数据库中转义。@cdonner,在这种情况下,您可以尝试将
元素中的“原始”数据存储在数据库中。换行符可能存储为\r\n
序列,然后您可以让DAL将这些序列替换为转义的
元素。Frédéric,这正是我所做的,但正如我所说,转义的br标记中的符号再次转义,当它们在尾端未转义时,它们被恢复到实际的标记(根本没有转义),这不起作用。换言之:成为&;书信电报;谢谢,jasso-我自己刚刚发现了这一点,作品的副本很好,嵌入的标签存储在未替换的位置。
<MemoComment>Previous job: Associate, Boston<br/>Test1<br/>Test2</MemoComment>
<xsl:value-of select="//MemoComment" disable-output-escaping="yes" />
<TD>
<xsl:value-of select="//MemoComment"/>
</TD>
<TD>
<xsl:copy-of select="//MemoComment/node()"/>
</TD>