Ситема как функциональность с XSLT?

Недавно я задал вопрос об использовании XSL / t для создания макета сайта и дочерних страниц.Вот.. Где макет будет украшать дочернюю страницу. Я хочу расширить эту идею и придумать функциональность, подобную SiteMesh. Обратите внимание, что у меня будет очень небольшое количество файлов макета xsl, большинство моих файлов xsl должно быть для дочерних страниц. Макет довольно прост, он включает в себя заголовок, главное меню, нижний колонтитул, тело с содержимым div под ним. SiteMesh позволяет вам определять файлы шаблонов как довольно стандартный html-файл, а затем дочерние страницы, которые переопределяют разделы родительского элемента. Например, вот базовый шаблон (декоратор) для sitemesh:

<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>

<head>
  <title>
    <decorator:title default="SiteMesh Tutorial Example" /> - Site Title
  </title>
  <style type="text/css">@import "css/global.css";</style>
  <decorator:head />
  <body>
    <div id="header">
      <h2><a href="http://www.my-site.com/">Mysite.com</a> goes here</h2>
    </div>
    <div id="content">
      <decorator:body />
    </div>
  </body>
</html>

И тогда вот пример дочерней страницы:

<html>
  <head>
    <title>Child Page</title>
    <style type='text/css'> 
     p { margin: 10 }    
    </style>
  </head>
  <body>
    Content Goes here
  </body>
</html>

Как только декоратор применяется к дочерней странице, результат содержит тело дочерней страницы, гдедекоратор: тело был в, адекоратор: голова заменяется, и т. д. Довольно просто, как это работает и довольно эффективный способ организации сайта.

Итак, теперь давайте предположим, что мы вместо этого используем XSL / T, и мы хотим использовать аналогичную структуру, в которой мы не переопределяем то, как выглядит макет, скорее мы определяем это, надеюсь, только один раз (или, возможно, несколько раз для страниц, которые не ' очень похоже), и мы заменяем разделы, если они есть у дочернего шаблона. Похоже, это было бы очень просто, но проблема в том, что данные, которые поддерживают этот сайт, будут выглядеть (на самом деле не сайт блога, а просто пример того, с чем я имею дело)

<xml>
<section>Blogs</section>
<page>UserBlogs</page>
<data>
 <blogs>
   <blog>
     <title>First Blog</title>
     <author>John Doe</author>
     <description>...</description>
   </blog>
 </blogs>
</data>
</xml>

Итак, теперь давайте скажем, что у меня есть мастер t, emplate, как это:

<html>
<head>
  <title><!-- replace this with child title --> - Site Title</title>
  <script src="common-scripts.js"></script>
  <style type="text/css">@import "common.css" </style>
  <!-- insert everything in the child <head> here except the title -->

</head>
<body>
  <div id="header">Header/log that stuff here</div>
  <div id="menu">
     <ul><li><a href="#">Cat 1</a></li><li><a href="#">Cat 2</a></li></ul>
  </div>
  <div id="content">
    <!-- replace this with everything between <body>...</body> in the child -->
  </div>
  <div id="footer">My Site, copyright, bla bla</div>
</body>
</html>

Итак, что я хочу сделать, это взять этот XML сверху (тот, что касается блогов) и применить его к моей дочерней странице, взять результат этого преобразования и применить его к моему основному шаблону (который будет копировать / применять элементы по мере необходимости ). Я не уверен, есть ли способ сделать это в одной трансформации. В настоящее время архитектура такова, что мне предоставляется xml, как показано, и я должен построить это на странице. Я подумал, что, возможно, я мог бы сделать так, чтобы основной шаблон включал дочерний шаблон, а затем использовал xsl: call-template, обернутый в объявление xsl: variable для захвата результатов дочернего шаблона в текущем xml. Мне нужно каким-то образом использовать результаты этого преобразования для замены раздела title / header / content основных шаблонов.

Есть идеи, как это можно сделать?

Я вижу на этом сайте:http://www.devguru.com/technologies/xslt/quickref/xslt_element_calltemplate.html что вы можете захватить результаты xsl: call-template в объявлении xsl: variable, я просто запутался, как вы можете затем использовать эти данные, кроме вывода их ..

Любая помощь будет оценена

Ответы на вопрос(1)

Ваш ответ на вопрос