c# - 在 XSL 中创建空格 ( )

我试图通过以下方式在 XSL 文档中创建自动间距。

<td><xsl:value-of select="Name/First"/> <xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text><xsl:value-of select="Name/Last"/> </td> 但是,呈现的 HTML 具有以下形式

<td>John&amp;nbsp;Grisham</td>

关于如何解决这个问题的任何想法?

最佳答案

你的直接问题是当 unicode 160 (hex 0xA0) &nbsp;是 HTML 实体,它不是 XML 实体。

使用 &#160;&#xA0;代替不间断空间。

但是对于更大的问题,如何处理 XSL 中的空白,答案很简单:使用 <xsl:text> .

每次包含任何纯文本时,将其包含在 <xsl:text> the text goes here </xsl:text> 中标签。否则,下次聪明的文本编辑器重新格式化您的文档时,您将陷入痛苦的世界。

您已经在至少一个大陆,或者如果您幸运的话可能在一个痛苦的国家,因为期望 XML/XSL 保留空白。即使是将 XSL 理解到 n 程度的天才,仍然会因空白处理而遭受县或至少自治市镇级别的痛苦。 (自治市镇级别的痛苦编码在 XML 规范“2.11 行尾处理”中,其疯狂的设计决定拒绝区分 LF 和 CRLF - 所以没有人可以避免这种情况)。

让您知道会发生什么:这并不容易 - 您可以在没有 <xsl:text> 的情况下逃脱标签的时间出奇地长,但如果您只是接受它,并从一开始就将它们放入,从长远来看会更容易。

错误示例:

  <xsl:element name="MyElem">
      <xsl:attribute name="fullPath">c:\base\Path\here\<xsl:value-of select="../parent/@relPath"/>\<xsl:value-of select="@fileName">
      </xsl:attribute>
  </xsl:element>

右例:

  <xsl:element name="MyElem">
      <xsl:attribute name="fullPath">
          <xsl:text>c:\base\Path\here\</xsl:text>
          <xsl:value-of select="../parent/@relPath"/>
          <xsl:text>\</xsl:text>
          <xsl:value-of select="@fileName">
      </xsl:attribute>
  </xsl:element>

事实是,它们都产生完全相同的输出

但其中一个会在未来的某个时候搞砸,是的,可能被尚未出生的人 ,另一个不会。

简短的解释是:默认情况下忽略仅包含空白的节点(除非您调整选项)。所以这是任何仅由 CR 组成的东西, LF , TABSPACE> 之间和 < .由非空白文本组成的节点,前导和尾随空白,可能有空白“折叠” - 即效果好。

因此示例 RIGHT 与此之间的区别:

  <xsl:element name="MyElem">
      <xsl:attribute name="fullPath">
          c:\base\Path\here\
          <xsl:value-of select="../parent/@relPath"/>
          \
          <xsl:value-of select="@fileName">
      </xsl:attribute>
  </xsl:element>

是一个生成 <MyElem fullPath="c:\base\Path\here\relative\path\filename.txt"/>另一个,根据有效的 DOM 选项,生成以下之一:

<MyElem fullPath="c:\base\Path\here\relative\path\filename.txt"/>
<MyElem fullPath="c:\base\Path\here\ relative\path \ filename.txt"/>
<MyElem fullPath="c:\base\Path\here\&#10;relative\path&#10;\&10;filename.txt"/>
<MyElem fullPath="c:\base\Path\here\&#9;&#10;relative\path&#9;&#10;\&#9;&10;&#9;filename.txt"/>

其中只有一个是您想要的...但其中任何一个都可能是正确的,具体取决于有效的选项...

https://stackoverflow.com/questions/15798957/

相关文章:

sql - 从当前 sysdate 中检索最近两年的数据

php - 在 TYPO3 Fluid 中显示按年和按月分组的元素列表

php - 如何解码json ajax响应

r - 均值与 fivenum : different results?

php - XML 中的项目符号 "•"

sql - 桥接表主键或复合/复合键

magento - 如何从前端 Controller 生成管理链接?

xml - 使用 XML 或 JSON 有什么用?

linq - linq可以写Update语句吗?

arrays - @a[-@a..-2] 是什么意思?