-1

スタイルシートで属性を使用できないことを除いて、私の xsl スタイルシートは正常に動作します。しかし、私は自分の機能を完了するために本当に必要です。

php で xsl を使用しています。属性を宣言して を使用しようとすると、xsl は $attr が php 変数であると認識し、関数がクラッシュします。

これは私のコードです

<?php
function releaseNotes($source, $type, $order_by, $sort) {

$type = $type ? "[@type='{$type}']" : "";

$xsl = <<<XSL
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:key name="versions" match="issue" use="fix_versions"/>
<xsl:key name="type" match="issue" use="concat(fix_versions, '+', @type)"/>

  <xsl:template match="issues">



      <xsl:for-each select="//issue[generate-id(.)=generate-id(key('versions', fix_versions)[1])]">

        <xsl:sort select="fix_versions" order="descending"/> 

        <div class="release">

            <a href="" class="version"><xsl:value-of select="fix_versions"/></a>




            <xsl:attribute name="version"><xsl:value-of select="fix_versions"/></xsl:attribute>
            <xsl:value-of select="$version"/>
            <xsl:if test="//release[@version = '$version']">
              Yeah
            </xsl:if>



            <div class="version" style="display:none;">

            <xsl:for-each select="key('versions', fix_versions)">

                <xsl:for-each select="key('type', concat(fix_versions, '+', @type))">
                    <div style="border-bottom:1px solid grey;">
                    <a href="" class="title"><xsl:value-of select="title"/></a>
                    <div class="toggle" style="display:none;">
                        <xsl:value-of select="description"/>

                </div>
          </div>                        
            </xsl:for-each>

            </div>
       </div>
      </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>
XSL;

$xmldoc = new DOMDocument('1.0', 'utf-8');
$xmldoc->load($source);
$xsldoc = DOMDocument::loadXML($xsl);

$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
return $proc->transformToXML($xmldoc);
}
?>  

どこで属性を使用しようとしても、それを使用したいと思ったらすぐに関数の結果が得られませんか? 何か案が?

この例では役に立たないようですが、このバージョン番号を持つノード「リリース」があるかどうかを確認したいので、現在の文字列のバージョンを属性として取得する必要があります。

xml構造はこのようなものです

<release version="x.x.x" name="release1"/>
<release version="x.x.x" name="release2"/>
<release version="x.x.x" name="release3"/>
<issues>
  <issue><fix_versions>x.x.x</fix_versions></issue>
  <issue><fix_versions>x.x.x</fix_versions></issue>
  <issue><fix_versions>x.x.x</fix_versions></issue>
</issues>

すでにリリースされているバージョンの問題のみが表示されます。そのため、同じバージョンのリリースがあるかどうかを確認する必要があります

グループ化も含め、すべてが正常に機能しますが、属性は. 私が言ったように、関数は aatribute の名前ではなく、php 変数として $version を取ります。

前もって感謝します

4

1 に答える 1

0

あなたの質問は少し混乱していますが、問題は次のとおりです。

$type = $type ? "[@type='{$type}']" : "";

$type は変数として変換され、展開されます。変数の前に \ を置くと、動作します。

$type = $type ? "[@type='{\$type}']" : "";
or 
$type = $type ? "[@type='".'{$type}'."']" : "";
于 2012-07-20T08:05:45.127 に答える