2016-03-30 17 views
0

私はこのXMLを持っている:私は理解していませんか?

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="aj.xsl"?> 
<Test> 
    <Highlight> 
    <HighlightName>Name 1</HighlightName> 
    <HighlightName>Name 2</HighlightName> 
    <HighlightName>Name 3</HighlightName> 
    <HighlightName>Name 5</HighlightName> 
    <HighlightName>Name 6</HighlightName> 
    </Highlight> 
    <Date> 
    <Name>Name 1</Name> 
    </Date> 
    <Date> 
    <Name>Name 6</Name> 
    </Date> 
    <Date> 
    <Name>Name 2</Name> 
    </Date> 
    <Date> 
    <Name>Name 7</Name> 
    </Date> 
    <Date> 
    <Name>Name 3</Name> 
    </Date> 
    <Date> 
    <Name>Name 8</Name> 
    </Date> 
    <Date> 
    <Name>Name 4</Name> 
    </Date> 
    <Date> 
    <Name>Name 9</Name> 
    </Date> 
    <Date> 
    <Name>Name 5</Name> 
    </Date> 
</Test> 

そして、いくつかのテストXSL:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"> 
    <xsl:output method="html" indent="yes" version="4.01" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/> 
    <xsl:template match="/"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
     <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
     <link rel="stylesheet" type="text/css" href="Workbook-S-140-Version2.css"/> 
     <title>Test</title> 
     </head> 
     <body> 
     <xsl:for-each select="Test/Highlight/HighlightName"> 
      <xsl:variable name="strHighlightName" select="."/> 
      <p>Start of list for {$strHighlightName}</p> 
      <xsl:for-each select="Test/Date"> 
      <xsl:apply-templates select="Name"/> 
      </xsl:for-each> 
     </xsl:for-each> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="Name"> 
    <p> 
     <xsl:if test="$strHighlightName=."> 
     <xsl:text>**</xsl:text> 
     </xsl:if> 
     <xsl:value-of select="."/> 
    </p> 

    </xsl:template> 
</xsl:stylesheet> 

サンプルは、問題を伝える短いです。最後のシナリオでは、私のファイルはより詳細です。

私が実装しようとしていた基本的な考え方は、私が強調表示したかった知られている名前のリストをループにしました。他のものの中で、他の名前のどれかがハイライトされた名前の1つであるかどうかを示したいと思いました。だから私は、上記を試してみましたが、悲しいことに、変数strHighlightNameテンプレートには表示されません。

私はパラメータを使用して、テンプレートに値を供給することができます実現しますが、現実の世界で、私は、これはすべてのtehの道ダウンテンプレートにPARAMカスケード接続する必要がありますが名前を呼び出すことができます。

私は、このアプローチを使用することはできませんので、私は違っそれを行うことができますか?たとえば、次のようにすることができます:

<xsl:template match="Name"> 
    Does "." match any of the names in the "//Highlight/HighlightName" section? 
    If yes 
     Text "** " 
</xsl:template> 

意味はありますか?それは必要とされる変数やパラメータを渡す必要性を避けるでしょう。

ありがとうございます。

答えて

1
I realise I can use parameters and feed the value in to the template, but in the real world I would have to cascade this param all the way down into the template can calls Name. 

XSLT 1.0では、すべての中間テンプレートをカスケードする必要があります。

XSLT 2.0では、中間のすべてで明示的に言及する必要なく、最初のテンプレートから2番目のテンプレートにトンネルするトンネルパラメータを使用できます。だから、

、XSLT 2.0プロセッサは、アプリケーション環境で利用可能であるかどうかを確認します。

関連する問題