Отображение разрывов строк в XML с использованием ASP.NET с XSLT - PullRequest
2 голосов
/ 22 июня 2010

У меня проблема с моим 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-файл, который выглядит так:*

Когда отображается первая строка детализации, все находится на одной линии.Я покопался и попробовал следующее:

  1. xml: space = "preserve" в файле XSLT
  2. в файле XML
  3. <br />
  4. Я даже пытался оставить все как есть.

Я использую Microsoft Visual Web Developer 2010. Я использую элемент управления - это элемент управления XML в соответствии со стандартом.tab, и я использую язык C #, если это поможет.

Если на этот вопрос уже дан ответ, и я его еще не нашел, пожалуйста, укажите мне на него.

Спасибо за вашу помощь.

1 Ответ

3 голосов
/ 22 июня 2010

Это преобразование :

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