Мастер-страница XSLT? - PullRequest
       22

Мастер-страница XSLT?

2 голосов
/ 09 мая 2011

Я создаю веб-приложение, в котором страницы представлены в формате xml, и они используют таблицы стилей xslt для создания вывода xhtml.

В результате многие макеты страниц будут содержаться в таблице стилей XSLT, в некотором смысле таблица XSLT содержит всю общую информацию о макетах страниц, возможно ли создать главную страницу asp.net для xslt простынь?? По сути, у меня была бы страница aspx, генерирующая xml и включающая другую страницу aspx, которая представляет собой лист xslt, использующий главные страницы для подключения любых изменений содержимого на странице [только для средней панели].

Кроме того, как вы думаете, это хорошая стратегия дизайна?

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Это то, что я называю техникой «Заполнить пропуски», и да, это очень хороший шаблон проектирования , который позволяет отделить логику представления и обработки отдельно, и иметь возможностьиметь много разных форматов вывода без необходимости изменения преобразования.

Ниже приведен полный и очень короткий пример использования этой техники :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pMasterPage" select=
  "'file:///c:/temp/delete17.xml'"/>

 <xsl:variable name="vDoc" select="/"/>

 <xsl:template match="node()|@*">
  <xsl:param name="pInput"/>
  <xsl:copy>
   <xsl:apply-templates select="node()|@*">
    <xsl:with-param name="pInput" select="$pInput"/>
   </xsl:apply-templates>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="/">
  <xsl:apply-templates select="document($pMasterPage)/*">
   <xsl:with-param name="pInput" select="$vDoc"/>
  </xsl:apply-templates>
 </xsl:template>

 <xsl:template match="first-name|last-name|age">
  <xsl:param name="pInput"/>
  <xsl:value-of select="$pInput/*/*[name()=name(current())]"/>
 </xsl:template>

</xsl:stylesheet>

Когдаэто преобразование применяется к следующему документу XML :

<person>
 <first-name>John</first-name>
 <last-name>Smith</last-name>
 <age>23</age>
 <nationality>British</nationality>
</person>

, и если файл: c:\temp\delete17.xm l содержит это :

<html>
 <h1>Person:</h1>

 <p>First Name: <first-name/></p>
 <p>Last Name: <last-name/></p>
 <p>Age: <age/></p>
</html>

, тогда получается следующий результат :

<html>
   <h1>Person:</h1>
   <p>First Name: John</p>
   <p>Last Name: Smith</p>
   <p>Age: 23</p>
</html>

, отображаемый браузером как :

Person:

Имя: Джон

Фамилия: Смит

Возраст: 23

2 голосов
/ 10 мая 2011

Я сделал это для решения в прошлой жизни - точнее, я попросил кого-то сделать для меня немалую часть (-:

) По сути, вам нужны только две вещи, XML и XSLT -отдых - это просто слесарное дело и, вероятно, не нужно. XSLT достаточно, чтобы сделать все макеты, которые вы хотите, так что это всего лишь вопрос подключения XML к странице.

С точки зрения XSLT вы легкополучил возможность делать вещи типа главной страницы с помощью включений и контента с помощью шаблонов, которые определяются / переопределяются в шаблонах конкретных типов страниц.

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

Еслиу вас есть погоня вокруг, вы обнаружите, что разные люди делали интересные вещи с помощью движков представления XML / XSLT для MVC.

InТермины «это хороший подход» - ну, для меня это очень хорошо работало для CMS, специфичной для клиента (без единого сгенерированного XML-файла), и, по сути, Umbraco был основан на той же предпосылке использования XSLT для рендеринга XML (хотя это несколько меняетсяс введением бритвы в умбрако).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...