2016-03-10 6 views
1

У меня есть формат документа XML, который со временем превратился в нечто большее, чем тонкая оболочка вокруг HTML. Чтобы помочь в редактировании (в конечном счете, с функцией «Предварительный просмотр» Coda), я пытаюсь сделать перевод XSLT.Ошибка на стороне XSLT на стороне клиента

Образец документа:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet href="x.xsl" type="text/xsl" ?> 
<htmldocument> 
    <title>Document Title</title> 
    <section> 
    <sectiontitle>Section Title</sectiontitle> 
    <div> 
     <p>First Paragraph</p> 
     <p><b>Second Paragraph</b></p>  
    </div> 
    </section> 
</htmldocument> 

Мой XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml"> 

    <xsl:output method="xml" indent="yes" encoding="UTF-8"/> 
    <xsl:template match="/htmldocument"> 
     <html> 
      <head> 
       <style type="text/css"> 
        body 
        { 
         font-size: 15px; 
         font-family: Helvetica; 
        } 
       </style> 
      </head> 
      <body> 
       <xsl:apply-templates /> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="//title"> 
      <h1> 
      <xsl:apply-templates /> 
      </h1> 
    </xsl:template> 

    <xsl:template match="/htmldocument/section"> 
     <div> 
     <xsl:apply-templates /> 
     </div> 
    </xsl:template> 

    <xsl:template match="/htmldocument/section/div"> 
     <xsl:copy-of select="." /> 
    </xsl:template> 

    <xsl:template match="/htmldocument/section/sectiontitle"> 
     <h2> 
     <xsl:apply-templates /> 
     </h2> 
    </xsl:template> 

</xsl:stylesheet> 

Если я использую xsltproc для обработки XML в HTML-файл, все работает, как ожидалось:

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <style type="text/css"> 
            body 
            { 
              font-size: 15px; 
              font-family: Helvetica; 
            } 
          </style> 
    </head> 
    <body> 
    <h1>Document Title</h1> 
    <div> 
    <h2>Section Title</h2> 
    <div xmlns=""> 
      <p>First Paragraph</p> 
      <p><b>Second Paragraph</b></p> 
    </div> 
    </div> 
</body> 
</html> 

Однако , если я открою файл XML в браузере, хотя преобразование явно происходит, его отображение отображаемого HTML - это la rgely не хватает информации о стиле. В частности, <div> и <p>, по-видимому, имеют display:inline, а элемент <b> не влияет на вес шрифта.

Я могу добавить дополнительный стиль через элемент <style>, но я не хочу, чтобы изобретать колесо.

Я что-то упустил, или я просто слишком много ожидаю от визуализации XSLT на стороне клиента?

ответ

2

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

Так что либо удалите пространство имен XHTML, либо используйте xsl:output method="html"/> или убедитесь, что вы преобразуете элементы в элементы XML в XHTML, например. (при условии, что вы держите xmlns="http://www.w3.org/1999/xhtml")

<xsl:template match="*"> 
    <xsl:element name="{local-name()}"> 
    <xsl:apply-templates select="@* | node()/"> 
    </xsl:element> 
</xsl:template> 
Смежные вопросы