2013-04-16 1 views
0

XSLT используется как шаблонный движок. У меня есть какая-то структура шаблонов, которые передают данным в одно от другого с Params: xsl: применить шаблоны с параметрами - как сохранить форматирование?

<xsl:template match="/" mode="common-page"> 
    <xsl:param name="page-content"/> 
    … 
    <xsl:copy-of select="$page-content"/> 
    … 
</xsl:template> 

и называют этот шаблон:

<xsl:template match="/"> 
    <xsl:apply-templates select="." mode="common-page"> 
     <xsl:with-param name="page-content"> 
     <!--some html content with formatting--> 
     <html> 
      <body> 
       <h1>Header</h1> 
       <div> 
        <p>Text</p> 
       </div> 
      </body> 
     </html> 
     </xsl:with-param> 
    </xsl:apply-templates> 
</xsl:template> 

В этом случае форматирование содержимого HTML остается, выход:

<html> 
    <body> 
     <h1>Header</h1> 
     <div> 
      <p>Text</p> 
     </div> 
    </body> 
</html> 

Но если я пытаюсь указать match или select в <xsl:apply-templates> (/result/page вместо /) форматирование вытерто. Param page-content такое же:

<html><body><h1>Header</h1><div><p>Text</p></div></body></html> 

Пример XML:

<result xmlns:xlink="http://www.w3.org/TR/xlink" module="content" method="content" system-build="21199" lang="ru" header="Main page" title="Main page" request-uri="/.xml" pageId="2"> 
    <meta> 
     <keywords/> 
     <description/> 
    </meta> 
    <user id="42" status="auth" login="admin" xlink:href="uobject://42" type="sv"/> 
    <parents/> 
    <page id="2" parentId="0" link="/" is-default="1" is-active="1" object-id="313" type-id="50" type-guid="content-page" update-time="1364964725" alt-name="index"> 
     <basetype id="27" module="content">Content page</basetype> 
     <name>Main page</name> 
     <properties> 
      <group id="65" name="common"> 
       <title>Params</title> 
       <property id="117" name="h1" type="string"> 
        <title>H1</title> 
        <value>Main page</value> 
       </property> 
      </group> 
     </properties> 
    </page> 
</result> 
+0

Можете ли вы показать нам образец кода XML, который вы используете здесь, а также привести пример кода, который заставляет форматировать «уничтожить». Благодаря! –

+0

добавили реальные данные – safright

ответ

0

Если вы используете XSLT 2.0 и вы пытаетесь получить результат документ, который отступом (с отступом вкладки для каждого внутреннего уровня XML), вы должны иметь возможность добавить элемент xsl:output в элемент xsl: stylesheet и указать, что отступ должен быть включен.

Например, в начале вашего XSL: таблицы стилей элемента, можно добавить следующее:

<xsl:stylesheet> 
    <xsl:output indent="yes" /> 
    <!-- rest of document --> 
</xsl:stylesheet> 

Также см атрибут method для XSL: выходной элемент, который устанавливает значения по умолчанию для общих типов выходных таких как «xml», «html» и «xhtml».

+0

использовать его настройки уже: ' ' – safright