XML с HTML и XSLT-преобразованием - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь изменить XML-документ, содержащий html внутри тега, который я могу преобразовать <p> и перечислить, но у меня есть жирный шрифт и курсив внутри. Как я могу это сделать? Я использую шаблоны xslt для преобразования.

Это мой код:

<Memoria>     
  <titulo>Memoria EUITI 2010</titulo>
  <Indice>
     <titulo>Indice 2010</titulo>
    <secciones>
      <seccion>
       <parent_id>1</parent_id>
         <titulo>INFORMACI&#211;N GENERAL</titulo>
          <contenido><p><strong>ESTO</strong> ES UNA <em>PRUEBA</em></p></contenido>
<ul>
    <li> caso de poner</li>
</ul>
<p>Ver si funciiona esto que si funciona ya esta</p>
<p> </p></contenido
      </seccion>
    </secciones>
  </Indice>
</Memoria>

Я использую это преобразование xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/"> 

     <Memoria>
       <xsl:apply-templates select="//Memoria"/>
     </Memoria>
  </xsl:template>
  <xsl:template match="text()"/>

  <xsl:template match="titulo">
    <titulo>
      <xsl:value-of select="."/>
    </titulo>
  </xsl:template>

  <xsl:template match="Indice/titulo">
   <Indice>
      <xsl:value-of select="."/>
    </Indice>
  </xsl:template>

  <xsl:template match="Indice/secciones/seccion">
     <Seccion>
      <xsl:apply-templates select="contenido|titulo"/>
   </Seccion>

  </xsl:template>

  <xsl:template match="Indice/secciones/seccion/titulo">
    <nombre_seccion>
      <xsl:value-of select="."/>
    </nombre_seccion>
  </xsl:template>  


  <xsl:template match="contenido">
    <Contenido>
      <xsl:apply-templates select="p|ul"/>
    </Contenido>
  </xsl:template>


  <xsl:template match="p">
    <p>
      <xsl:value-of select="."/>
    </p>
  </xsl:template>

  <xsl:template match="ul">
    <ul>
      <xsl:for-each select="li">
    <li>
      <xsl:value-of select="."/>
    </li>
      </xsl:for-each>
    </ul>
 </xsl:template>
</xsl:stylesheet>

С помощью этого шаблона я получаю действительный документ XML, но этот документ не попадает внутрь:

  <contenido><p><strong>ESTO</strong> ES UNA <em>PRUEBA</em></p></contenido>

Как я могу это сделать?

С другой стороны, я хочу преобразовать этот результирующий документ с другим XSLT в XSL-FO, чтобы сгенерировать PDF с FOP. Я могу сгенерировать p и список, но я не могу генерировать жирный и курсивный.

Это правильный способ сделать это:

HTML-> XML-> XSL-FO

или есть какие-нибудь способы напрямую преобразовать код?

1 Ответ

1 голос
/ 02 марта 2012

Если вы хотите скопировать смешанное содержимое элемента, т. Е. Включая всю разметку, вам нужно использовать copy-of вместо value-of.Например:

<xsl:template match="p">
  <xsl:copy-of select="."/>
</xsl:template>

Это помещает в вывод сам элемент p, все текстовое содержимое и все дочерние элементы, включая, таким образом, и т. Д.

...