【问题标题】:Displaying line breaks in XML using ASP.NET with XSLT使用带有 XSLT 的 ASP.NET 在 XML 中显示换行符
【发布时间】:2010-06-21 21:25:21
【问题描述】:

我试图在我的 ASP.NET 页面上显示的 XML 有问题,我可以通过一些帮助来解决。 我想做的是在多行上显示它,所以我有一个如下所示的 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. &lt;br /&gt;
  4. 我什至尝试过保持原样。

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

如果这个问题已经得到解答,但我还没有找到,请指点一下。

感谢您的帮助。

【问题讨论】:

  • 您是否将
    添加到 XML 源文件或 XSLT 文件中?您应该能够毫无问题地将 hte
    放入您的 XML 源文件中。
  • 好问题 (+1)。请参阅我的答案以获得完整的解决方案。

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


【解决方案1】:

这种转变

<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2019-01-23
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多