通过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中解码)
这可以在不重新构建所有内容的情况下完成吗

根据注释中的请求,以下是实际代码:

XSL

XSLT中输入数据的变化
  • 以前的工作:助理,波士顿
    Test1
    Test2
  • 以前的工作:波士顿
测试一及#xA;测试2
  • 以前的工作:波士顿&;书信电报;br/&;燃气轮机;Test1br/Test2
  • 相应的XSLT结果
  • 以前的工作:助理,BostonTest1测试2
  • 以前的工作:波士顿
测试一及#xA;测试2
  • 以前的工作:波士顿&;书信电报;br/&;燃气轮机;Test1br/Test2

  • 所有这些元素在Outlook中都无法正确呈现。

    请尝试在文本中嵌入转义的

    元素,并将元素的
    禁用输出转义属性设置为
    yes

    <MemoComment>Previous job: Associate, Boston&lt;br/&gt;Test1&lt;br/&gt;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&lt;br/&gt;Test1&lt;br/&gt;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>