問題タブ [exslt]
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.
xml - Str:XSLT でトークン化すると、期待どおりの結果が得られない
次の区切り形式のファイルがあります
次のファイルをこの形式の XML にしたい
以下は私が試したことです
しかし、出力のみの閉じたタグで値を取得していません
私は何を間違っていましたか
お願いします
ありがとう
xml - XSL インクルード XSL に含まれる XSL のプレフィックスを使用して xpath を処理する名前空間を登録する
わかった。書いて申し訳ありませんが、xPath を処理するために私がしていることは非常に奇妙です。私は xsltproc だけを使用しているため、ツールは XSLT 1.0 と EXSLT のみです。
1 つの入力 xml ファイルを使用して、さらに処理する必要がある xml ファイルを取得します。これにより、適用している xsl のプレフィックスと名前空間がわかりません。
さらに、入力 xml ファイルから "xPathes" (属性として保存されている) を使用する必要があります。したがって、EXSLT を使用して、変数にロードされるドキュメントの xpath を評価 (dyn:evaluate 関数) する必要があります。
importDoc を作成します。
その後、xpathを使用したい...私のxsltでそのようなもの:
しかし、最後に私はこのメッセージを受け取りました
だから、「名前空間の自動登録」のようなものが必要ですか??? または、カタログファイルを使用して修正することはできますか??? または、いくつかの種類のインポートまたはインクルードを使用できますか???
よろしくお願いします
マーカス
xml - ブラウザーで使用されるスタイルシート内でトークン化を使用する
大きな文字列から特定のトークンを変数に割り当てようとしています。最初に文字列をトークン化し、次にトークンごとに特定の部分文字列が含まれているかどうかを確認します。そうであれば、そのトークンを変数に割り当てたいと思います。
最後に、その変数を使用して div の属性を設定します。
以下のこのコードを試してみました。これにより、必要な正確な出力が得られますoXygen XML Editor
。ただし、(11) で XML/XSLT ファイルを実行すると、以下の XSLTを意味するIE
元の文字列全体が出力されるだけです。xhtmlVar
div も表示されません (DOM にある可能性がありますが、視覚的にはわかりません。これをしばらく再確認します)。
XSLT
どうすれば私が望むものを達成できますか? 私は何か間違ったことをしていますか?上記のコードをより適切に記述する方法に関するヒントも大歓迎です!
前もって感謝します!
アップデート:
以下の Martin Honnen の提案に従って、EXSLT を使用するようにコードを変更しました。
ただし、現在、トークン化テンプレートは、指定された区切り文字を実際に区切り文字として使用するのではなく、単に削除しているように見えます。また、空白を区切り文字として使用する方法がわかりません。
...
上記のコードは、単語「Ha」で区切られた各トークンを出力する代わりに、文字列全体 (すべてのトークン) を出力しますが、コンマ区切り文字「,」は削除されます。そして最後に「は」が出てきます。私はおそらくnode-set
関数を間違って使用していますか?
$spaceChar
また、単語のような区切り文字を使用しようとする'than'
と、「テンプレート命令スタックオーバーフロー」エラーの線に沿って何かを取得することがよくあります。
michael.hor の答えごとのコードは機能します。
使用して、str:replace()
そのように
ただし、oXygen XML でこのエラーが表示されます。
xml - ノードセットでの exslt str:replace の使用に関する問題
exslt 文字列置換関数を使用する場合、名前空間と思われる問題があります。ドキュメントhereに従って、exslt string replace 関数の nodeset 形式を使用して、ターゲット文字列内の複数の文字列を置き換えたいと思います。ただし、ノードセットの最初の文字列のみを置き換え、他の文字列は置き換えないようです。
これが私のファイルです:
出力は次のとおりです。
出力でわかるように。関数を使用すると、最初のノードの文字列のみが置き換えられます。2番目のものはそうではありません。ご覧のとおり、exslt.org からテンプレート コードをファイルにコピーしましたが、最初は、次のxmlns=""
ように str:replace テンプレートに追加するまで機能しませんでした。
その時点で、テンプレート フォームが機能するので、これは名前空間の問題だと思います。replace
関数でノードをソートし、次のように独自のノードを作成すると思います。
そのノードはおそらく別の名前空間で終了するため、後続のループはそれらに対処できません。xmlns
に属性を追加すると、str:replace
そこに作成されたすべてのノードが、渡すノードと同じ null 名前空間に配置され、機能します。ただし、何を試しても関数バージョンを機能させることができません。作成したファイルと xml ノードセットからすべての名前空間を削除しましたが、それでも機能しません。率直に言って、この名前空間のすべては、私にとって少し混乱を招きます。たぶん、それはまったく問題ではありません。
どんな助けでも大歓迎です、ありがとう!
xml - xslt で同じ ID を持つ 2 番目のノードを削除します
XSLT 2.0 を使用して、xml ファイル内の同じ ID を持つノードを削除する必要があります。構造は次のとおりです。
結果は次のようになります。
同じ属性 ID 値を持つものが複数あります。ありがとう
xslt - グループ化されたデータのグループ化
入力:
期待される出力:
上記の例のように、まず個人名でグループ化し、全員の役割を見つける必要があります。複数の人が同じ役割のセットを持っていることがわかった場合 (たとえば、ジョンとジェイコブの両方が作家であり詩人でもある場合)、役割のセットごとにグループ化し、人の名前をリストする必要があります。
Muenchian メソッドや EXSLTset:distinct
などを使用して、グループ化の最初のレベルでこれを行うことができます。
上記は、XSLT 1.0 と EXSLT を使用して変換されました。
ただし、グループ化された役割をグループ化する方法を理解するには助けが必要です。
XSLT 1.0 ソリューションが利用できない場合は、遠慮なく XSLT 2.0 アプローチを推奨してください。