Как сохранить метки разметки?

17

У меня есть XML-документ, содержащий новости, а элемент body в новостях содержит p-теги среди простого текста. Когда я использую XSL для извлечения тела, например,

<xsl:value-of select="body" />

p-теги, похоже, удаляются. Я использую реализацию Visual Studio 2005 XSL.

Есть ли у кого-нибудь идеи, как избежать этого? Спасибо.

    
задан gilles27 02.10.2008 в 15:21
источник

5 ответов

24

Попробуйте использовать

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

вместо этого. Из документации w3schools на том же :

  

Элемент <xsl:copy-of> создает   копия текущего узла.

     

Примечание. Узлы пространства имен, дочерние узлы,   и атрибуты текущего узла   автоматически копируется также!

    
ответ дан Blair Conrad 02.10.2008 в 15:27
  • Спасибо Блэр, это сработало. –  gilles27 02.10.2008 в 15:43
  • Спасатель жизни. Спасибо. –  SearchForKnowledge 17.11.2014 в 16:56
4

Если у вас нет контроля над входным документом, копирование должно работать:

От Ссылка

"С другой стороны, элемент xsl: copy-of может копировать все поддеревья каждого узла, который выбирает шаблон. Сюда входят атрибуты, если атрибут select xsl: copy-of имеет соответствующее значение. в следующем примере шаблон копирует узлы элемента заголовка и все их узлы-потомки - другими словами, полные элементы заголовка, включая их теги, подэлементы и атрибуты: «

<xsl:template match="title">
  <xsl:copy-of select="*"/>
</xsl:template>
    
ответ дан Eugene Katz 02.10.2008 в 15:30
  • Спасибо, это работает, я последовал за предложением Блэра Конрада, увидев это первым, но вы оба сказали то же самое. –  gilles27 02.10.2008 в 15:43
1

Если у вас есть контроль над исходным документом, CDATA - это правильный путь.

    
ответ дан Eugene Katz 02.10.2008 в 15:25
  • Спасибо, но я не могу изменить формат документа. –  gilles27 02.10.2008 в 15:30
  • Если я переношу свой вложенный HTML-код с помощью CDATA, я получаю буквальный HTML-код, я хочу сохранить линейные фиды (т. е. теги абзаца). –  PeterX 22.11.2013 в 08:06
1

Значение XML-элемента - это верно не только в XSLT, но и в реализациях DOM - это объединение всех его текстовых узлов-потомков. В XSLT value-of испускает значение элемента, а copy-of испускает копию элемента.

    
ответ дан Robert Rossney 02.10.2008 в 21:37
-1

Это потому, что двигатель интерпретирует & lt; p & gt; тег (исключая его для вывода). Вам нужно указать, что вы хотите, чтобы содержимое «как есть», используя атрибут «disable-output-escaping = yes | no».

<xsl:value-of select="body" disable-output-escaping="yes"/>
    
ответ дан Enrico Murru 02.10.2008 в 15:26
  • Я пробовал это, но это не имело никакого значения. –  gilles27 02.10.2008 в 15:31
  • попробуйте с ложью ... Я всегда не помню правильное использование –  Enrico Murru 02.10.2008 в 15:32
  • другой вопрос ... это было ДА или НЕТ –  Enrico Murru 02.10.2008 в 15:34
  • disable-output-escaping предназначен для включения / отключения экранирования зарезервированных символов (> становится> или остается>). –  Goran 02.10.2008 в 15:34