xsl:apply-templates с params - как сохранить форматирование?
XSLT используется как шаблонизатор. У меня есть некоторая структура шаблонов, которые передают данные друг другу с параметрами:
<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>
1 ответ
Если вы используете XSLT 2.0 и пытаетесь получить результирующий документ с отступом (с отступом табуляции для каждого внутреннего уровня XML), тогда вы сможете добавить элемент xsl:output в вашу таблицу xsl:stylesheet элемент, и укажите, что отступ должен быть включен.
Например, в начале вашего элемента xsl:stylesheet вы можете добавить следующее:
<xsl:stylesheet>
<xsl:output indent="yes" />
<!-- rest of document -->
</xsl:stylesheet>
Также см. method
атрибут для элемента xsl:output, который устанавливает значения по умолчанию для распространенных типов вывода, таких как "xml", "html" и "xhtml".