私はXSLに比較的慣れていません。特殊文字 (BasicLatin コード ブロックの外側にあるもの) を特定の方法で処理する必要があります。エンティティ コードとリテラル文字が基本的に同じであることは理解していますが、そのようには見えないテキスト エディターで作業する必要があります (それは私の制御範囲外です)。したがって、リテラル文字を保持することはオプションではありません。可能であれば、Perl やその他のメカニズムではなく、XSL でこれを処理したいと考えています。ここに私が持っているものがあります:
<p>This is a story—a long story.</p>
これは私の望ましい結果です:
<p>This is a story<0x2014>a long story.</p>
次のような正規表現を使用してこれを実行しようとしています。
<xsl:value-of select="replace(., '(\P{IsBasicLatin})', 'concat('<0x', string-to-codepoints($1), '>'))"/>
しかし、数値リテラルの後に区切り記号が必要であるというエラーが表示されます。私が理解しているそのエラーのドキュメントを見つけることができませんでした。置換の一部として関数を使用しようとする試みに関連していますか? そのようなことはXSLで許可されていますか? そうでない場合は、提案を歓迎します。ここで提供されている回答を確認しました: convert character if codepoint within given range、これは関連しているように見えましたが、私にとってはうまくいきませんでした (最初のものは特殊文字を消去し、2番目のものは非常に奇妙な出力を与えます)。
どんな助けでも大歓迎です。関数またはコードポイントのいずれかについて何かが欠けていると思いますが、自分で少し壁にぶつかりました。ありがとう!