Как избавиться от xmlns=»»?

#xml #xslt #xhtml

#xml #xslt #xhtml

Вопрос:

Я пытаюсь преобразовать XML в xHTML с помощью XSLT.

После этого я получаю xmlns="" атрибут во всех HTML-тегах( <p> ).

Это моя часть моего файла XSL

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml"
       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
       doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
  <html xmlns="http://www.w3.org/1999/xhtml">
  

В чем может быть проблема?

Комментарии:

1. Можете ли вы добавить больше вашего XSL? (Пытаюсь понять, почему ваш <html> начальный тег находится за пределами an xsl:template .)

2. Кроме того, что вы используете для обработки вашего XSLT?

3. @DevNull да, HTML включен в тег xsl:template… Я просто включил его для информации.. Я использую Xalan для обработки XSLT

4. Вы забыли предоставить полный (но минимальный, пожалуйста) пример, который позволил бы людям воспроизвести и понять проблему. Пожалуйста, предоставьте эту информацию.

Ответ №1:

Если вы хотите, чтобы все ваши результирующие элементы находились в пространстве имен XHTML http://www.w3.org/1999/xhtml , вам нужно поместить это объявление пространства имен в xsl:stylesheet элемент, поэтому используйте

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  xmlns="http://www.w3.org/1999/xhtml">

       <xsl:output method="xml"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
      doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>

  <xsl:template match="/">
    <html>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="foo">
    <p>
      <xsl:apply-templates/>
    </p>
  </xsl:template>

  ...
</xsl:stylesheet>