2013-07-29 3 views
0

Существует около миллиона вопросов, касающихся моей проблемы, и я внесла большую часть ответов без везения.Вывод HTML-тегов в XML-документе с помощью XSL

Я пишу приложение C#, которое содержит элемент управления веб-браузером. При загрузке формы элемент управления webbrowser загружает следующий XML. Этот XML оформлен с использованием XSL под ним.

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="messages.xsl"?> 
<messages> 
    <message> 
    <date>25/07/2013</date> 
    <time>11:41:07</time> 
    <locations>Everyone</locations> 
    <title>Test message 1</title> 
    <body>&amp;lt;P&amp;gt;This is a test message.&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;&amp;amp;nbsp;&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;Test!&amp;lt;/P&amp;gt;</body> 
    <publisher>Test</publisher> 
    </message> 
    <message> 
    <date>29/07/2013</date> 
    <time>11:20:10</time> 
    <locations>Everyone</locations> 
    <title>Another test message</title> 
    <body>&amp;lt;P&amp;gt;This is another test message.&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;&amp;amp;nbsp;&amp;lt;/P&amp;gt;&amp;lt;P&amp;gt;blah blah&amp;lt;b&amp;gt;blah blah &amp;lt;/b&amp;gt;blah blah.&amp;lt;/P&amp;gt;</body> 
    <publisher>Test</publisher> 
    </message> 
</messages> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" encoding="UTF-8"/> 
<xsl:template match="/"> 
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text> 
    <html> 
     <head> 
      <style> 
       div#message { 
        margin-bottom: 5px; 
        border: 0px solid black; 
       } 
       div#header { 
        /*background-color: #98AFC7;*/ 
        margin-bottom: 2px; 
       } 
       div.headline { 
        font-size: 20px; 
        font-family: Verdana; 
        cursor: hand; 
       } 
       div.headline:hover { 
        font-size: 20px; 
        font-family: Verdana; 
        color: orange; 
        cursor: hand; 
       } 
       div#tagline { 
        font-size: 9px; 
        font-family: Verdana; 
       } 
       div.main { 
        font-size: 12px; 
        font-family: Verdana; 
        background-color: #C3D9FF; 
        margin-top: 0px; 
        padding-bottom: 2px; 
        margin-bottom: 0px; 
       } 
       div#tags { 
        margin-top: 10px; 
       } 
       div#footer { 

       } 
       div#hr { 
        background-color: #4095EF; 
        height: 2px; 
        padding: 0px; 
        margin: 0px; 
       } 
      </style> 
      <script language="javascript" type="text/javascript" src="jquery-1.10.2.min.js"></script> 
      <script language="javascript" type="text/javascript"> 
       function toggleBody(id) { 
        $("#main_" + id + "").toggle(); 
       } 

       $(document).ready(function() { 
        $(".main").hide(); 



       }); 
      </script> 
     </head> 
     <body> 
      <div id="messages"> 
       <xsl:for-each select="messages/message"> 
       <xsl:variable name="i" select="position()"/> 
        <div id="message"> 
         <div id="header"> 
          <div id="{$i}" class="headline"><xsl:attribute name="onClick">javascript:toggleBody(this.id)</xsl:attribute> 
           <xsl:value-of select="title" disable-output-escaping="yes"/> 
          </div> 
          <div id="tagline"> 
           Published on <xsl:value-of select="date"/> at <xsl:value-of select="time"/> by <xsl:value-of select="publisher"/>. 
          </div> 
         </div> 
         <div id="main_{$i}" class="main"> 
          <div id="body"> 
           <xsl:value-of select="body" disable-output-escaping="yes"/> 
          </div> 
          <div id="tags"> 
           Tags: <xsl:value-of select="locations" /> 
          </div> 
         </div> 
         <div id="footer"> 
          <div id="hr"> 
          </div> 
         </div> 
        </div> 
       </xsl:for-each> 
      </div> 
     </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

, к сожалению, оказанные HTML отображается следующим образом:

<P>This is a test message.</P><P>&nbsp;</P><P>Test!</P> 

<P>This is another test message.</P><P>&nbsp;</P><P>blah blah<b>blah blah </b>blah blah.</P> 

Как будет идти об оказании HTML-теги правильно?

Я пробовал использовать copy-and и disable-output-escaping = "yes" без успеха. Я попытался изменить вывод на HTML и добавить шаблон, но опять же, без радости.

Может кто-нибудь помочь.

Заранее спасибо.

+0

Ну, вы контролируете вход? Вам нужен формат, например ' <P> Это сообщение. </Р > '(который я бы разметить как' Это сообщение.

]]> '), чтобы затем иметь строковое значение тела как'

Это послание.

', который с' disable-output-escaping' будет создавать элемент 'P' в результате. При двойном экранировании вы не можете ожидать '& lt; P & gt;' для создания элемента. –

+0

Спасибо, Мартин, отлично работает! –

ответ

0

Хорошо, что вы контролируете вход? Вам нужен такой формат, как <P> Это сообщение. </Р > (который я бы разметить как:

<body><![CDATA[<P>This is a message.</P>]]></body>) 

, чтобы затем иметь строковое значение тела как:

<P>This is a message.</P> 

, который с отключения-вывода -escaping создаст в итоге элемент P. При двойном экранировании вы не можете ожидать & amp; lt; P & ампер; для создания элемента.

Смежные вопросы