XSLT: парсинг HTML встроен в XML? - PullRequest
6 голосов
/ 09 июля 2009

На моем веб-сайте у меня есть XML с содержимым моей страницы (автоматически сгенерированным из моей БД) - которые отображаются с использованием XSLT. Проблема заключается в следующем: я хотел бы иметь некоторое форматирование в некоторых тегах XML. Например, если у меня есть XML, содержащий статью в формат как это:

<article>
  <header>Cool article</header>
  <author>Me!</author>
  <content>
    This is an article. It's <b>HUGE</b>, and here's a <a href="http://Www.foo.com">link</a>.
  </content>
</article>

Однако, если я просто получаю содержимое, используя это: <xsl:value-of select="content" /> все форматирование HTML игнорируется / теряется. Я предполагаю, что он ошибочно принимается за дочерние узлы XML, а не за реальные данные, находящиеся в узле контента.

Каков предпочтительный способ достижения форматирования, как описано здесь?

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

Ответы [ 6 ]

7 голосов
/ 09 июля 2009
<xsl:value-of select="content" /> 

выводит значение узла . И значение вашего <content> узла на самом деле:

This is an article. It's HUGE, and here's a link

Что вам, вероятно, нужно, это скопировать весь узел:

<xsl:copy-of select="content" /> 

Это в значительной степени предположение, поскольку я не знаю, как работает ваша система.

3 голосов
/ 09 июля 2009
<xsl:value-of
select="..."
disable-output-escaping="yes"/>

Это работает во всех браузерах, кроме Firefox .

2 голосов
/ 09 июля 2009

Я думаю, что ваша проблема заключается в следующем:

 <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
          media-type="application/html+xml" encoding="utf-8" omit-xml-declaration="yes" indent="no"/>

убедитесь, что ваш вывод имеет тип HTML,

application/html
0 голосов
/ 09 июля 2009

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

This is an article. It's <b>HUGE</b>, and here's a <a href="http://Www.foo.com">link</a>.  

станет:

This is an article. It's &lt;b&gt;HUGE&lt;/b&gt;, and here's a &lt;a href="http://www.foo.com"&gt;link&lt;/a&gt;

или используйте блок CDATA, чтобы форматирование HTML не потерялось.

0 голосов
/ 09 июля 2009

Вы можете изменить генерацию этого XML-файла, чтобы поместить содержимое в раздел <![CDATA[ ]]>, который указывает синтаксическому анализатору игнорировать специальный контент в этом разделе.

0 голосов
/ 09 июля 2009

Либо кодируйте ваш html, когда вы просто встраиваете его в elemnet, либо используйте блок CDATA для сохранения фактического текста. Любой из них должен работать, хотя в зависимости от того, где происходит преобразование (например, уровень браузера через JS), выходные данные могут отличаться для закодированных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...