2017-08-24 11 views
0

XSLTファイルで使用されているすべてのxPathを取得することは可能ですか?例えばXSLTファイルのすべてのxPathを取得できますか?

XSLTファイル:毎回の行を出力するカスタムポストプロセッサを作ることによって

/catalog/cd 
/catalog/cd/title 
/catalog/cd/artist 

多分:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>My CD Collection</h2> 
       <table border="1"> 
        <tr bgcolor="#9acd32"> 
         <th>Title</th> 
         <th>Artist</th> 
        </tr> 
        <xsl:for-each select="/catalog/cd"> 
         <tr> 
          <td> 
           <xsl:value-of select="title"/> 
          </td> 
          <td> 
           <xsl:value-of select="artist"/> 
          </td> 
         </tr> 
        </xsl:for-each>      
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

は、出力として、私はこのようなリストが欲しいですxPathsは一致する/一致していませんか? アイデアは大歓迎ですので、大歓迎です:) ありがとう!

+0

この目的は何ですか? –

+0

私は統合を行っています。ソフトウェアでは、データをエクスポートするxmlパスを定義できます。場合によっては、XSLTで使用されるよりも多くのxmlパスがエクスポートされます。だから私はどのxPathsが使用されているか見ることができます。 – GalaxyBounce

+1

これは可能だとは思わない。パスは相対パスでもかまいません。パスを絶対パスにするには、現在のコンテキストパスにパスを追加する必要があります。パスはスタイルシート内のどこにでも置くことができます。同じ名前のテンプレートを異なるコンテキストから呼び出すことができます。 - パスが実際に使用されたかどうかは、XML入力によって異なります。 –

答えて

0

あなたはこれを使用することができます:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="*"> 
      <xsl:for-each select="ancestor-or-self::*"> 
       <xsl:text>/</xsl:text> 
       <xsl:value-of select="local-name(.)"/> 
      </xsl:for-each> 
     <xsl:apply-templates/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

あなたの応答に感謝します!私はその解決策にもかかわらず、しかし、私はすべてのxPathsだけでなく、xslで使用される – GalaxyBounce

0

XSLTでテンプレートルールのマッチングが非常に動的であるので、それは難しいです:あなたは、XSL呼び出す一致=「都市」のテンプレートがある場合:適用-テンプレートを、あなたの場合match = "city"の別のテンプレートがある場合、XSLTコンパイラは/ cities/cityというパスがあることを知ることができません。

Saxonは内部的に "パスマップ"を記述するのではなく、XQueryで "ドキュメント投影"を実装するために使用されますが、動的なテンプレートルールの送信のためにXSLTではほとんど使用されません。

パスを決定するための静的解析は、あなたを非常に遠ざけるものではありません。また、実行時に訪問されたパスをキャプチャする動的解析も興味深いことを示唆しています。原則として、あなたはSaxonでそれをTraceListenerで行うことができます。難しいのは、訪問先の意味を正確に判断することです。例えば、xsl:copy-of select="/"をドキュメント内のすべてのノードやルートノードだけにアクセスするとしますか?

関連する問題