2014-04-23 3 views
0

Мне нужно использовать преобразование символов для моего приложения. В качестве примера я посмотрел на книгу и пытался играть с примером (если этот вопрос this bookПриложение А ->[2.0] <xsl:character-map> раздел)xsl: character-map/xsl: output-character не работает

Вот мой XML (из книги):

<?xml version="1.0" encoding="utf-8"?> 
<!-- special-characters.xml --> 
<char-test> 
    <tabs> 
    public class HelloWorld { 
     public static void main(String[] args) { 
      System.out.println("Hello, World!"); 
      } 
     } 
    </tabs> 
    <special-char>&#x2780;</special-char> 
    <special-char>&#x2781;</special-char> 
</char-test> 

Вот мой XSL (из книги):

<?xml version="1.0" encoding="utf-8"?> 
<!-- character-map1.xsl --> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" use-character-maps="sample" /> 
    <xsl:character-map name="sample" use-character-maps="circles"> 
     <xsl:output-character character="&#x9;" string=" " /> 
    </xsl:character-map> 
    <xsl:character-map name="circles"> 
     <xsl:output-character character="&#x2780;" string="&lt;img src='images/circle1.gif' 
width='28' height='28'/&gt;" /> 
     <xsl:output-character character="&#x2781;" string="&lt;img src='images/circle2.gif' 
width='28' height='28'/&gt;" /> 
    </xsl:character-map> 
    <xsl:template match="char-test"> 
     <html> 
      <head> 
       <title>A test of some special characters</title> 
      </head> 
      <body style="font-family: sans-serif;"> 
       <h1>A test of some special characters</h1> 
       <xsl:apply-templates select="*" /> 
      </body> 
     </html> 
    </xsl:template> 
    <xsl:template match="tabs"> 
     <pre style="font-size: 150%; font-weight: bold;"> 
      <xsl:value-of select="." /> 
     </pre> 
    </xsl:template> 
    <xsl:template match="special-char"> 
     <p style="font-size: 200%;"> 
      <xsl:text>Here's a special character: </xsl:text> 
      <xsl:value-of select="." /> 
     </p> 
    </xsl:template> 
</xsl:stylesheet> 

Я не ожидаю получить & # x2780; и & ##; , Я ожидаю получить замены для этих персонажей. Я пробовал http://www.freeformatter.com/xsl-transformer.html с XML и XSL.

Результат не то, что я ожидал:

<?xml version="1.0" encoding="UTF-8"?> 
<html> 
    <head> 
     <title>A test of some special characters</title> 
    </head> 
    <body style="font-family: sans-serif;"> 
     <h1>A test of some special characters</h1> 
     <pre style="font-size: 150%; font-weight: bold;">public class HelloWorld { 
      public static void main(String[] args) { 
       System.out.println("Hello, World!"); 
       } 
      }</pre> 
     <p style="font-size: 200%;">Here's a special character: ➀</p> 
     <p style="font-size: 200%;">Here's a special character: ➁</p> 
    </body> 
</html> 

специальные символы не были заменены. Я смущен, потому что эти примеры из хорошей книги, и я вижу тот же подход в Интернете. Где моя магия?

ответ

3

Это говорит о том, что процессор XSLT, с которым вы тестируете, является процессором версии 1.0, а не версией 2.0 - символьные карты - это функция с поддержкой только 2.0.

http://xsltransform.net/ поддерживает 2.0, если вы используете двигатель Saxon 9.

+0

Действительно. Большое спасибо! –

+1

Еще одна возможность, которая объясняет симптомы, заключается в том, что вы использовали процессор XSLT 2.0, но не использовали его сериализатор (например, вы отправляли вывод в дерево DOM) –

Смежные вопросы