2009-07-09 2 views
5

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

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

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

+2

[ЭТО] (http://stackoverflow.com/questions/4707571/how-can-you-deal-with-embedded-xml-tags-in-xslt) является фактическим ответом. Используйте 'copy-of' вместо' value-of'. –

ответ

2

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

<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

Приветствия! Метод настройки = «html» исправил его. :) – Hallgeir

+0

Я рад, что смогу помочь вам :). – Andrew

0

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

+0

Привет, это, к сожалению, приводит к тому, что теги отображаются в виде простого текста - то есть форматирование не применяется. Я исправил его с помощью . Спасибо в любом случае – Hallgeir

7
<xsl:value-of select="content" /> 

выводит значение фиксировался узел . И ценность вашего <content> узла на самом деле:

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

То, что вы, вероятно, нужно это копия весь узел:

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

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

+1

Приветствия, это отчасти было проблемой. :) Использование copy-of вместо value-of в сочетании с исправлено. – Hallgeir

+1

Это тоже выглядит правильно, но это зависит от того, как XHTML встроен в XML, а не только в HTML. Во-вторых, copy-of собирается выводить содержимое в пространство имен исходного исходного XML-документа, а не пространство имен, к которому XSL иначе выводит. Большинство веб-браузеров, вероятно, все равно, но если вы видите кучу xmlns = "..." атрибутов в своем выпуске, вот почему. –

+1

Старый пост, помог мне сейчас. –

0

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

+0

Привет, это, к сожалению, приводит к тому, что теги отображаются в виде простого текста - то есть форматирование не применяется. Я исправил его с помощью . Спасибо в любом случае – Hallgeir

0

При помещении 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

Привет, это, к сожалению, делает теги отображаться в виде простого текста - то есть форматирование не применяется. Я исправил его с помощью . Спасибо в любом случае – Hallgeir

3
<xsl:value-of 
select="..." 
disable-output-escaping="yes"/> 

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

+0

XSLT анализируется на стороне сервера, поэтому, если я не пропущу что-то, браузер должен быть неактуальным? (Это было решение для моей конкретной проблемы, кстати, спасибо!) –

+0

@NathanHornby Браузеры также могут анализировать XML/XSLT. – ZippyV

+0

В каком смысле? , –

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