XSLで現在のノードを取得する機能があることは知っていますが、以前のノードと次のノードを参照できる方法があります。現在位置? XPath Axes on W3:あなたはpreceding-sibling
とfollowing-sibling
軸を参照して、(例えばfor-each
ループなど)現在の実行の流れとは反対に、文書構造の次と前のノードについて話していると仮定すると、XSL(T)current/previous/next
2
A
答えて
4
いいえ。現在のコンテキストは、どのノードが「次」または「前」であるかを知ることができません。
、例えば、テンプレートが適用されたとき、メカニックはこのように行くので、これは次のとおりです。
- あなたが実行します。
<xsl:apply-templates select="*" /><!-- select 3 nodes (a,b,c) -->
- XSLTプロセッサは、(A、B、処理すべきノードのリストを作成し、 C) それらのノードの各々について
- 、XSLTプロセッサを選択してテンプレートが呼び出されると、
current()
ノードが定義され、そしてposition()
が定義されているが、テンプレート無しKを有していないこと以外 - マッチングテンプレートを実行します実行フローの今の所。
- 実行順序は、結果が同じであることが保証されている限り、プロセッサの設定に従います。あなたの(理論的な)予測は、あるプロセッサにとって真実であり、別のプロセッサに対しては間違っているかもしれません。 XSLTのような副作用のないプログラミング言語の場合、このような知識は危険なものになるだろうと思う(人々が実行命令に頼りがちなので)。あなたが
following::sibling
かpreceding::sibling
のXPath軸を使用して行うことができますが、それは上記の説明は、それがあったように、質問に答えることをしようとに処理されるかのノードを知ることは異なる何か
尋ねられましたが、OP はとは違う意味です。ユニークなノードのみをグループ化/出力することです。
OPの要求に従って、ここではXPath軸を使用してグループ化を達成する方法を簡単に説明します。
XML(項目が事前にソートされている):
<items>
<item type="a"></item>
<item type="a"></item>
<item type="a"></item>
<item type="a"></item>
<item type="b"></item>
<item type="e"></item>
</items>
XSLT
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/items">
<!-- copy the root element -->
<xsl:copy>
<!-- select those items that differ from any of their predecessors -->
<xsl:apply-templates select="
item[
not(@type = preceding-sibling::item/@type)
]
" />
</xsl:copy>
</xsl:template>
<xsl:template match="item">
<!-- copy the item to the output -->
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
出力:
<items>
<item type="a"></item>
<item type="b"></item>
<item type="e"></item>
</items>
1
。
同じ名前の次のノードを取得するには、次の状況に応じて、
following-sibling::*[name() = name(current())]
を、あなたは最初の部分でname(.)
を使用する必要があります。
0
あなたは、後で処理するための変数で前回と今回追跡することができます。 I.タグ(i-2)、タグ(i-1)を保持し、それらをタグ(i)で使用することができます。
ちょっとしたアイデア。
よろしくお願いいたします。
関連する問題
- 1. XSL-T&XSL-FO:XMLデータを再構成して各ページのページシーケンスを動的に作成する
- 2. XSL
- 3. XSL
- 4. xsl:先行兄弟とソートXSLT 1.0 XSL-FO muenchian xsl:キー
- 5. Java依存のxslファイルでのXSLキャッシュ
- 6. XSL 2.0:
- 7. は、XSL
- 8. のxsl:
- 9. XSLファイル
- 10. は、XSL
- 11. xslネストループエラー
- 12. XSL:式
- 13. XSL - ノード
- 14. は、XSL
- 15. は、XSL
- 16. 表示\t \t最も第二\t支払わ\t量\t製品\tで\tすべての\t日
- 17. XSLファイルスタイルシートが
- 18. xslのウェブパーツタイトル
- 19. XSL変換
- 20. Sitecore XSLキャッシュ
- 21. eclipseのXSLモデラー
- 22. マッチ要素XSL
- 23. Symfony2 TwigとXSL
- 24. xslでバンディング
- 25. URIResolver、Docbook、XSL Transform
- 26. xsl filter on select
- 27. SOAP、XSL、HTML
- 28. Xml、xsl Javascript sorting
- 29. XSL値属性
- 30. XSL foreach変数
のように、私は大きなソートリストを処理しています。例えば <項目タイプ= ""> <項目タイプ= ""> <項目タイプ= ""> <項目タイプは= ""> <項目タイプ= "B" > 前の項目が同じ種類であるかどうかを知りたいので、いくつかのCSSをグループ化してグループ化することができます。 – James
これはMuenchianのグルーピングによって最も効果的ですが、アイテムのリストがソートされている場合は、 '' item {@type!= previous-sibling :: item/@ type}」で取得できます。 – Tomalak
これをいくつかの作業コードに入れますか?私はそれを働かせることはできません。以前のものが同じなら、それをHEYと言いますか?ありがとう! – James