3

コードポイント値が 57600 ~ 58607 の Unicode 文字を含む XML ファイルがいくつかあります。現在、これらはコンテンツ内で正方形のブロックとして表示されており、これらを要素に変換したいと考えています。

だから私が達成したいのは次のようなものです:

<!-- current input -->
<p> Follow the on-screen instructions.</p>  
<!-- desired output-->
<p><unichar value="58208"/> Follow the on-screen instructions.</p>
<!-- Where 58208 is the actual codepoint of the unicode character in question -->

私はトークナイザーで少しだまされましたが、分割への参照が必要なため、これは複雑すぎることが判明しました。

これに最善を尽くす方法について何かアドバイスはありますか?私は以下のようなことをいくつか試してきましたが、打たれました(構文は気にしないでください。意味がないことはわかっています)

<xsl:template match="text()">
 -> for every character in my string
    -> if string-to-codepoints(current character) greater then 57600 return <unichar value="codepoint value"/>
       else return character
</xsl:template>
4

2 に答える 2

3

analyze-stringそれは例えばのための仕事のように聞こえます

<xsl:template match="text()">
  <xsl:analyze-string select="." regex="[&#57600;-&#58607;]">
    <xsl:matching-substring>
       <unichar value="{string-to-codepoints(.)}"/>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

テストされていません。

于 2012-05-29T12:45:01.527 に答える
3

この変換:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes"/>

 <xsl:template match="/*">
     <p>
      <xsl:for-each select="string-to-codepoints(.)">
        <xsl:choose>
            <xsl:when test=". > 57600">
              <unichar value="{.}"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="codepoints-to-string(.)"/>
            </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
     </p>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<p> Follow the on-screen instructions.</p>

必要な正しい結果が生成されます

<p><unichar value="58498"/> Follow the on-screen instructions.</p>

説明: 標準の XPath 2.0 関数string-to-codepoints()およびの適切な使用codepoints-to-string()

于 2012-05-29T12:43:23.663 に答える