c# - 使用 ASP.NET 和 XSLT 在 XML 中显示换行符

标签 c# asp.net xml xslt line-breaks

我的 XML 有问题,我试图在 ASP.NET 页面上显示该问题,需要一些帮助才能解决。 我想做的是将其显示在多行上,这样我就有一个如下所示的 XML 文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="News.xslt" ?>
<newslist>
  <news>
    <date>20th June 2010</date>
    <detail>Detail line 1.
            Detail Line 2</detail>
  </news>
  <news>
    <date>18th June 2010</date>
    <detail>Some more details</detail>
  </news>
</newslist>

我有一个如下所示的 XSLT 文件:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/">
    <HTML>
      <BODY>
        <xsl:for-each select="newslist/news">
          <xsl:sort select="date" order="descending"/>
          <br />
          <h3><xsl:value-of select="date" /></h3>
          <ul>
            <p><xsl:value-of select="detail" /></p>
          </ul>
        </xsl:for-each>
      </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>

当它显示第一个详细信息行时,所有内容都在同一行上。我做了一些挖掘,并尝试了以下方法:

  1. XSLT 文件中的 xml:space="preserve"
  2. 在 XML 文件中
  3. <br />
  4. 我什至尝试过保持原样。

我正在使用 Microsoft Visual Web Developer 2010。我使用的控件是标准选项卡下的 XML 控件,我使用的语言是 C#(如果有帮助的话)。

如果这个问题已经得到解答,但我还没有找到,请您指出它。

感谢您的帮助。

最佳答案

这种转变:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/">
    <HTML>
      <BODY>
        <xsl:for-each select="newslist/news">
          <xsl:sort select="date" order="descending"/>
          <br />
          <h3><xsl:value-of select="date" /></h3>
          <ul>
            <p><xsl:apply-templates select="detail"/></p>
          </ul>
        </xsl:for-each>
      </BODY>
    </HTML>
  </xsl:template>

  <xsl:template match="detail/text()" name="textLines">
   <xsl:param name="pText" select="."/>

    <xsl:choose>
        <xsl:when test="contains($pText, '&#xA;')">
          <xsl:value-of select="substring-before($pText, '&#xA;')"/>
          <br />
          <xsl:call-template name="textLines">
            <xsl:with-param name="pText" select=
             "substring-after($pText, '&#xA;')"
             />
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise><xsl:value-of select="$pText"/></xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<newslist>
  <news>
    <date>20th June 2010</date>
    <detail>Detail line 1.
            Detail Line 2</detail>
  </news>
  <news>
    <date>18th June 2010</date>
    <detail>Some more details</detail>
  </news>
</newslist>

产生想要的正确结果:

<HTML>
    <BODY><br><h3>20th June 2010</h3>
        <ul>
            <p>Detail line 1.<br>            Detail Line 2</p>
        </ul><br><h3>18th June 2010</h3>
        <ul>
            <p>Some more details</p>
        </ul>
    </BODY>
</HTML>

关于c# - 使用 ASP.NET 和 XSLT 在 XML 中显示换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088632/

相关文章:

c# - C#计算时间差并保存到mysql

C#泛型继承

asp.net - ASP.NET Web 表单中的 jQuery 验证插件

javascript - ajaxToolkit 中的 PopupControlExtender 不适用于启用 tinymce 的文本框

c# - 将服务器端生成的 PDF 发送到浏览器

c# - WCF N 层架构

c# - 将 ClickOnce 应用程序更改为正常?

android - passwordToggleEnabled 设置为 true 但不起作用

xml - XSL 如何避免 NaN

c# - 从 URL 读取 XML 文件,结果为空