Существует около миллиона вопросов, касающихся моей проблемы, и я внесла большую часть ответов без везения.Вывод 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>&lt;P&gt;This is a test message.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Test!&lt;/P&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>&lt;P&gt;This is another test message.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;blah blah&lt;b&gt;blah blah &lt;/b&gt;blah blah.&lt;/P&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'><!DOCTYPE html></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> </P><P>Test!</P>
<P>This is another test message.</P><P> </P><P>blah blah<b>blah blah </b>blah blah.</P>
Как будет идти об оказании HTML-теги правильно?
Я пробовал использовать copy-and и disable-output-escaping = "yes" без успеха. Я попытался изменить вывод на HTML и добавить шаблон, но опять же, без радости.
Может кто-нибудь помочь.
Заранее спасибо.
Ну, вы контролируете вход? Вам нужен формат, например '
<P> Это сообщение. </Р > '(который я бы разметить как' Это сообщение.]]> '), чтобы затем иметь строковое значение тела как'Это послание.
', который с' disable-output-escaping' будет создавать элемент 'P' в результате. При двойном экранировании вы не можете ожидать '& lt; P & gt;' для создания элемента. –Спасибо, Мартин, отлично работает! –