2013-01-09 59 views
1

我正在尝试使用带有字符映射的xsl文档替换我的xml文件中的某些特殊字符;这里是XML:在XML中使用字符映射

<?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet href="lesson12.xsl" type="text/xsl"?> 
    <!DOCTYPE Groceries> 
    <Groceries xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:noNamespaceSchemaLocation="lesson12.xsd"> 
    <Item><Name>Wasabi &#38; Soy Sauce Almonds</Name></Item> 
    <Item><Name>Peanut Butter &#38; Jelly Spread</Name></Item> 
    <Item><Name>Pork &#38; Beans</Name></Item> 
    <Item><Name>Coca Cola&#174;</Name></Item> 
    <Item><Name>Sprite&#174;</Name></Item> 
    <Item><Name>Dr. Pepper&#174;</Name></Item> 
    </Groceries> 

这里是我的架构:

 <?xml version="1.0"?> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Name" type="xs:token" /> 
    </xs:schema> 

这里是我的xsl:

 <?xml version="1.0"?> 
    <xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    version="2.0"> 

    <xsl:output method="html" use-character-maps="my_char_map" /> 

    <xsl:character-map name="my_char_map"> 
     <xsl:output-character character="&#38;" string="and"/> 
     <xsl:output-character character="&#174;" string="TM"/> 
    </xsl:character-map> 

    <xsl:template match="/"> 

    <h3>Groceries</h3> 
    <xsl:for-each select="/Groceries/Item/Name"> 
    <ul> 
    <li> 
    <xsl:value-of select="."/> 
    </li> 
    </ul> 
    </xsl:for-each> 

    </xsl:template> 
    </xsl:stylesheet> 

我还在学习有关XML的,不知道我的XSL:输出需要纠正,或者如果它是别的。

谢谢! AC

回答

2

除非您使用的是Saxon CE,否则您的浏览器只处理XSLT 1,它不支持字符映射。 (并且,您的架构没有定义<Groceries><Item>,但这并不重要,因为浏览器也不会看它,但是在架构感知模式下的XSLT 2解析器可能会抱怨... )

+0

谢谢!我实际上需要通过撒克逊运行它 - 它现在正在工作! – user1960614