HTMLレポートを構造化したいので、XMLを以下のように処理します。私は文法の権利を得るのに苦労しています。 変数の外側のcf_fixinpatch値を取得できますが、この値を「選択」で使用してセクションでさらにフィルタリングすることはできません。私は1つが、私はレコードを何を持っているか知っている...おかげXSLTマルチレベルフィルタリングの構文
HTMLを出力
<html>
<cf_fixinpatch> <= loop through unique values
write cf_fixinpatch header
<section> <= loop through unique values
write section header
<All records matching cf_fixinpatch and section values> <= loop
Write out various aspects of the Result node
</section>
<cf_fixinpatch>
</html>
入力XML
<DocumentElement>
<Results> <= many repeat nodes
<bug_id>64252</bug_id>
<name>SCADA</name>
<short_desc>[FUNCTIONALITY]: Server name is not correct in SOE System Message</short_desc>
<bug_status>VERIFIED</bug_status>
<resolution>FIXED</resolution>
<bug_severity>normal</bug_severity>
<section>Alarms</section>
<release_title>Some SOE items that reference an alarm server do not use its proper name</release_title>
<release_notes>Such events now use "ClusterName_ServerName" when referencing alarm servers.</release_notes>
<cf_fixinpatch>v7.50 SP1 Patch 5</cf_fixinpatch>
</Results>
...
</DocumentElement>
NB:Windowsのmsxlを使用して2.0をサポート(とあまりにもハードの場合はありません、2.0に移動することができます)、私は何かをすることができます
<xsl:variable name="unique-list" select="/DocumentElement/Results[not(cf_fixinpatch=following::Results/cf_fixinpatch)]" />
<xsl:for-each select="$unique-list">
<xsl:variable name="current_patch" select="cf_fixinpatch" />
<!-- but don't know how to use this in the next loop -->
-----------------
<xsl:for-each select="/DocumentElement/Results">
<xsl:if test="not(section = preceding-sibling::section)"> <= cant get to work, if worked i can win or
<xsl:if test="cf_fixinpatch != Results[position()-1]/cf_fixinpatch">
PM 09/05フィードバック - 私は解決策を見つけましたが、これを行うにはDの方法は、私はあなたがsection
要素によって、同じパッチ内のすべての人のため、最初のcf_fixinpatch
によると、その後Results
要素をグループ化しているように見えますいくつかのフィードバック
<xsl:for-each select="/DocumentElement/Results">
<xsl:variable name="thePatch" select="preceding-sibling::Results[1]/cf_fixinpatch"></xsl:variable>
<xsl:if test="($Patches = 'true') and (position() = 1 or cf_fixinpatch != $thePatch)">
<!-- Write out the Patch Level -->
<h4 style="color:#d82553">
<a>
<xsl:value-of select="cf_fixinpatch" />
</a>
</h4>
</xsl:if>
<xsl:variable name="theSection" select="preceding-sibling::Results[1]/section"></xsl:variable>
<xsl:if test="(position() = 1) or (section != $theSection)">
<!-- Write out the Section Information -->
<h4 style="color:#C75B12;text-index:40px">
<a>
<xsl:value-of select="section" />
</a>
</h4>
</xsl:if>
<!-- Then record info written out -->
をこれはしばしば問題に近づくための間違った方法です。 XSLTは、(ほぼ)純粋な関数型言語であり、異なるアプローチの恩恵を受ける。 [編集]あなたの質問は、入力に対応する出力XMLを表示し、あなたはいくつかの助けを得る可能性が高いです。 –
'Results'要素を' cf_fixinpatch'値でグループ化しようとすると、XSLT 1.0ではMuenchian Groupingと呼ばれる手法を使います。 (http://www.jenitennison.com/xslt/grouping/muenchian.htmlを参照)。あなたがそのケースであなたの期待される結果を示したら助けになるかもしれません。ありがとうございました! –
私は情報のhtmlファイルを作成していますが、Xmlは入力です。 –