問題タブ [node-set]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xslt - icecast サーバーの xslt 実装で node-set() 関数の可用性を検出する
Icecast には、 xmlsoftのlibxsltに基づく XSLT 実装が含まれています。
それがnode-set()関数をサポートしているかどうかを知りたいのですが、できれば他の Web 専用環境でも機能する方法で:
残念ながら、icecast の XSLT プロセッサは、icecast プロセスの Web インターフェイスを介してのみ Web アクセスできます (したがって、コマンドラインにxsltprocはありません)。さらに悪いことに、XSLT エラーのログ記録が限られています (間違ったことをすると、icecast プロセスが停止することがよくあります)。
これは最新の Windows ベースのビルド( Windows用の 2.3.3 ビルドはまだありません) であるため、icecast 2.3.2 を実行しています。2008 年の日付の libxslt.dll があります。DLL にはバージョン番号がありません。これを提供できます(下部のXSLTコードを参照):
David Carlisle のブログ記事「プラットフォームに依存しない方法でノード セット関数を使用する方法」で指摘されているEXSLT ノード セット関数で言及されているノード セット検出を実行してみました。
出力から、失敗すると思います:
Web インターフェースで XSL ファイルを介して見つける最良の方法は何でしょうか?
バージョン スクリプト:
私が試したノードセットスクリプト:
xpath - ノード セット関数との混同 - 「ID」
id への引数が node-set 型の場合、結果は引数 node-set 内の各ノードの string-value に id を適用した結果の和集合になります。
ドキュメントから上記の行を取得できませんでした。同じことを理解するための例を1つ挙げてもらえますか?
ありがとう
xml - IE および Chrome の XSLT 関数 exslt:object-type
EXSLT は、XSLT に一連の便利な拡張機能を提供します。おそらくほとんどの人が exslt:node-set 関数を使ったことがあるでしょう。EXSLT によって指定される他の関数の 1 つは、「exslt:object-type」です。残念ながら、ほとんどのブラウザー (Firefox を除く) はこの機能をサポートしていないようです。参照: http://greenbytes.de/tech/tc/xslt/ スクリプトを使用して IE でこの機能を実装することはできましたが、Google Chrome の回避策が見つからないようです。(これは、IE が Chrome よりも優れていると思われる場合の 1 つです)。
私のアプリケーションの主な目的は、引数が「ノード セット」であるかどうかを調べることです。または、より正確に言うと、xsl:apply-templates で引数を選択できる場合。
IE の実装は次のようになります。
問題は、Google Chrome で同様のことを行う方法です。
これは完全に自動化されたプロセスであると想定されているため、解決策はソース スタイルシートを手動で書き直すことではないことを理解してください。
私のシナリオは次のとおりです。エージェントが XML + XSLT を送信すると、プロセスは XSLT を自動的に書き換えて、xsl:value-of を xsl:apply-templates に変換します。xsl:value-of の select 属性のタイプは問題ではありませんが、select 属性をノードセットに解決できない場合、xsl:apply-templates は失敗します。
xml - ノードセットのウォーク中にソース XML を参照する方法は?
次の XSLT スタイルシート (簡略化) があります。
これは、次のソース XML ドキュメントを参照しています (これも簡略化されています)。
ソース ドキュメントへの参照は結果を生成しません。出力は、カテゴリごとに 1 つの空の要素です。
ソース ドキュメントのアイテムで要素を「埋める」にはどうすればよいですか?
明確にするために、この背後にある「実際の」問題は、別のアプローチを使用して既に解決されています。このアプローチが機能しない理由を理解しようとしています。
html - パス式で結果ツリー フラグメントを使用するには、まず msxsl:node-set() 関数を使用してノード セットに変換します。
次の XSLT コードがあります。
....
HtmlPermulations の値は次のとおりです。
しかし、このfor-eachループで使用しようとすると:
次のエラー メッセージが表示されます。
パス式で結果ツリー フラグメントを使用するには、まず msxsl:node-set() 関数を使用してノード セットに変換します。
誰でも助けることができますか?
xml - ノードセットを消費し、先行兄弟軸を使用する再帰テンプレート
次のような XML があります。
そして、すべての<stage>
要素を 1 レベル上に持ち上げて s の兄弟になる必要があります。たとえば、要素が 内の他の要素との前後関係を保持するように s<sp>
を分割します。<sp>
<stage>
<sp>
これを行うために XSLT に取り組んできました。<sp>
これには、最初の子まで (ただし、最初の<stage>
子は含まない) のすべての子要素を消費し、 new の子として結果ツリーに出力することを目的とした再帰的なテンプレートが含まれてい<sp>
ます。<stage>
次に、最初の要素を放出します。そして、その最初の要素に続くすべての要素を再帰します<stage>
。最終的に、子要素のリストに<stage>
s が残っていない場合、残りのすべての要素が結果ツリーの new 内に出力され<sp>
ます。デバッグを含むコードは<xsl:message>
次のとおりです。
このテンプレートは、次のように呼び出されます。
問題は、現在のノードの前にある現在のノード セット$stage/preceding-sibling::*
のノードだけを処理するという私の使用法にあります。実際に起こることは、すべての再帰呼び出しで、元のコンテキストから現在のノードに先行するすべてのノードが this によって選択されるということです。これは、再帰呼び出しが毎回正しい新しいノード セットを取得し、ノードがその正しいノード セットから取得されているにもかかわらずです。$content
$stage
$stage
<sp>
$stage/preceding-sibling::*
$content
$stage
$content
明確にするために、上記の XML の例の場合、<stage>To Antony</stage>
が$stage
ノードであり、$content
ノードに次のものが含まれている場合:
この式は、までのオリジナルのすべて$stage/preceding-sibling::*
の子を引き続き生成します。<sp>
<stage>To Antony</stage>
preceding-sibling
私が正しく理解していないことについて何かがあるに違いないと思います。助言がありますか?または、変換を達成するためのまったく異なる方法の提案さえありますか?