2

drupal.stackexchange.comのすばらしいユーザーの好意により、動的なDrupalページ用にHTMLに変換したXMLフィードがあります。ただし、問題は、XMLフィードに、知る必要がある可能性のあるすべてのものがリストされていることです。私の要件は、各ページが特定の情報のサブセットをレンダリングすることです。

基本的に、それは分解する必要があるプレゼンテーションスケジュールです。

私のフィード例は次のとおりです。

<track name="Track 1">
  <session name="Session 1" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45">
    <presentation name="Presentation 1">
       <author>Name 1</author>
       <author>Name 2</author>
       <abstract>summary of this presentation</abstract>
    </presentation>
    <presentation name="Presentation 2">
      ...presentation info
    </presentation>
  </session>

  <session name="Session 2" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45">
    <presentation name="Presentation 3">
      ...presentation info
    </presentation>
    <presentation name="Presentation 4">
      ...presentation info
    </presentation>
  </session>

  <session name="Session 3" starttime="2012-06-07 08:45" endtime="2012-06-07 10:45">
    <presentation name="Presentation 5">
      ...presentation info
    </presentation>
    <presentation name="Presentation 6">
      ...presentation info
    </presentation>
  </session>
</track>

ご覧のとおり、この手続き全体のすべての情報を取得します。すべてのトラック、セッション、プレゼンテーションがすべて1つのフィードに含まれています。今のところ、問題なく動的ページに解析できます。

基本的に、これが私がそれを取得したいものです(dateTimeの解析を無視します...私はすでにそれを持っています):

<h2>Track 1</h2>
<h3>Session 1</h3>
<ul>
  <li><a href="presentation-1.html">Presentation 1</a></li>
  <li><a href="presentation-2.html">Presentation 2</a></li>
</ul>
<h3>Sessoin 2</h3>
<ul>
  <li><a href="presentation-3.html">Presentation 3</a></li>
  <li><a href="presentation-4.html">Presentation 4</a></li>
</ul>

次に、プレゼンテーションリンクの1つをクリックすると、新しいページに移動します。

<h2>Presentation 1</h2>
<p>Presented by Name 1, Name 2</p>
<p>summary of this presentation</p>

したがって、ここで2つの問題があります...この方法でフィードを分割する方法が正確にわかりません。これは、Drupal6モジュール内で実行する必要があります。サンプルフィードのスニペットを表示しています...取得するフィードは非常に大きく、この方法で分割する必要があるためです。

私が持っているDrupalコードは次のとおりです。

function _xml_import_generate()
{
  $path = drupal_get_path('module', 'xml_import');
  $xsl = new DOMDocument();
  $xsl->load("{$path}/xml_import.xsl");

  $xslt = new XSLTProcessor(); 
  $xslt->importStyleSheet($xsl);

  $xml = new DOMDocument();
  $xml->load("myfeed.xml");

  return (string) $xslt->transformToXML($xml);
}
4

1 に答える 1

1

I.必要な最初のページ

<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:template match="/">
     <html>
       <xsl:apply-templates/>
     </html>
 </xsl:template>

 <xsl:template match="track">
   <h2><xsl:value-of select="@name"/></h2>
   <xsl:apply-templates>
    <xsl:with-param name="pTrack" select=
         "count(preceding-sibling::track) +1"/>
   </xsl:apply-templates>
 </xsl:template>

 <xsl:template match="session">
  <xsl:param name="pTrack"/>
   <h3><xsl:value-of select="@name"/></h3>
   <ul>
     <xsl:apply-templates>
        <xsl:with-param name="pTrack" select="$pTrack"/>
        <xsl:with-param name="pSess" select=
            "count(preceding-sibling::session) +1"/>
     </xsl:apply-templates>
   </ul>
 </xsl:template>

 <xsl:template match="presentation">
  <xsl:param name="pTrack"/>
  <xsl:param name="pSess" />
  <li>
    <a href=
    "presentation.html?track={$pTrack}&amp;sess={$pSess}&amp;pr={position()}">
      <xsl:value-of select="@name"/>
    </a>
  </li>
 </xsl:template>
</xsl:stylesheet>

この変換が提供されたXMLドキュメントに適用される場合

<conference>
    <track name="Track 1">
      <session name="Session 1" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45">
        <presentation name="Presentation 1">
           <author>Name 1</author>
           <author>Name 2</author>
           <abstract>summary of this presentation</abstract>
        </presentation>
        <presentation name="Presentation 2">
          ...presentation info
        </presentation>
      </session>

      <session name="Session 2" starttime="2012-06-06 10:45" endtime="2012-06-06 12:45">
        <presentation name="Presentation 3">
          ...presentation info
        </presentation>
        <presentation name="Presentation 4">
          ...presentation info
        </presentation>
      </session>

      <session name="Session 3" starttime="2012-06-07 08:45" endtime="2012-06-07 10:45">
        <presentation name="Presentation 5">
          ...presentation info
        </presentation>
        <presentation name="Presentation 6">
          ...presentation info
        </presentation>
      </session>
    </track>
</conference>

この有用な結果が生成されます:

<html>
   <h2>Track 1</h2>
   <h3>Session 1</h3>
   <ul>
      <li><a href="presentation.html?track=1&amp;sess=1&amp;pr=1">Presentation 1</a></li>
      <li><a href="presentation.html?track=1&amp;sess=1&amp;pr=2">Presentation 2</a></li>
   </ul>
   <h3>Session 2</h3>
   <ul>
      <li><a href="presentation.html?track=1&amp;sess=2&amp;pr=1">Presentation 3</a></li>
      <li><a href="presentation.html?track=1&amp;sess=2&amp;pr=2">Presentation 4</a></li>
   </ul>
   <h3>Session 3</h3>
   <ul>
      <li><a href="presentation.html?track=1&amp;sess=3&amp;pr=1">Presentation 5</a></li>
      <li><a href="presentation.html?track=1&amp;sess=3&amp;pr=2">Presentation 6</a></li>
   </ul>
</html>

II。2ページ目:

<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="track" select="1"/>
 <xsl:param name="sess" select="1"/>
 <xsl:param name="pr" select="1"/>

 <xsl:template match="/*">
     <html>
       <xsl:apply-templates select=
         "track[position()=$track]
                  /session[position()=$sess]
                      /presentation[position()=$pr]"/>
     </html>
 </xsl:template>

 <xsl:template match="presentation">
  <h2><xsl:value-of select="@name"/></h2>
  <p>Presented by <xsl:text/>
    <xsl:apply-templates select="author"/>
  </p>
  <p><xsl:copy-of select="abstract/node()"/></p>
 </xsl:template>

 <xsl:template match="author">
  <xsl:if test="position() > 1">, </xsl:if>
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供されたXMLドキュメント(上記)に適用されると、必要な正しい結果が生成されます。

<html>
   <h2>Presentation 1</h2>
   <p>Presented by Name 1, Name 2</p>
   <p>summary of this presentation</p>
</html>

注意してください

エンドユーザーが最初のページのリンクをクリックするたびに、WebサーバーはこのWebリクエストを処理し、2番目の変換を呼び出して、外部/グローバルパラメータを渡す必要があります。その値は、対応するクエリから適切に設定する必要があります。文字列パラメータ。

于 2012-07-07T00:09:43.567 に答える