2010-04-10 7 views
2

я работаю над этим из поваренной книги XSLTповаренной пример XSLT не работает

типа my.xml

<?xml version="1.0" encoding="UTF-8"?> 

<people> 
    <person name="Al Zehtooney" age="33" sex="m" smoker="no"/> 
    <person name="Brad York" age="38" sex="m" smoker="yes"/> 
    <person name="Charles Xavier" age="32" sex="m" smoker="no"/> 
    <person name="David Williams" age="33" sex="m" smoker="no"/> 
    <person name="Edward Ulster" age="33" sex="m" smoker="yes"/> 
    <person name="Frank Townsend" age="35" sex="m" smoker="no"/> 
    <person name="Greg Sutter" age="40" sex="m" smoker="no"/> 
    <person name="Harry Rogers" age="37" sex="m" smoker="no"/> 
    <person name="John Quincy" age="43" sex="m" smoker="yes"/> 
    <person name="Kent Peterson" age="31" sex="m" smoker="no"/> 
    <person name="Larry Newell" age="23" sex="m" smoker="no"/> 
    <person name="Max Milton" age="22" sex="m" smoker="no"/> 
    <person name="Norman Lamagna" age="30" sex="m" smoker="no"/> 
    <person name="Ollie Kensington" age="44" sex="m" smoker="no"/> 
    <person name="John Frank" age="24" sex="m" smoker="no"/> 
    <person name="Mary Williams" age="33" sex="f" smoker="no"/> 
    <person name="Jane Frank" age="38" sex="f" smoker="yes"/> 
    <person name="Jo Peterson" age="32" sex="f" smoker="no"/> 
    <person name="Angie Frost" age="33" sex="f" smoker="no"/> 
    <person name="Betty Bates" age="33" sex="f" smoker="no"/> 
    <person name="Connie Date" age="35" sex="f" smoker="no"/> 
    <person name="Donna Finster" age="20" sex="f" smoker="no"/> 
    <person name="Esther Gates" age="37" sex="f" smoker="no"/> 
    <person name="Fanny Hill" age="33" sex="f" smoker="yes"/> 
    <person name="Geta Iota" age="27" sex="f" smoker="no"/> 
    <person name="Hillary Johnson" age="22" sex="f" smoker="no"/> 
    <person name="Ingrid Kent" age="21" sex="f" smoker="no"/> 
    <person name="Jill Larson" age="20" sex="f" smoker="no"/> 
    <person name="Kim Mulrooney" age="41" sex="f" smoker="no"/> 
    <person name="Lisa Nevins" age="21" sex="f" smoker="no"/> 
</people> 

типа родовое-атр-к-csv.xslt

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:csv="http://www.ora.com/XSLTCookbook/namespaces/csv"> 

<xsl:param name="delimiter" select=" ',' "/> 

<xsl:output method="text" /> 

<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:for-each select="$columns"> 
    <xsl:value-of select="@name"/> 
    <xsl:if test="position() != last()"> 
     <xsl:value-of select="$delimiter/> 
    </xsl:if> 
    </xsl:for-each> 
    <xsl:text>&#xa;</xsl:text> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="/*/*"> 
    <xsl:variable name="row" select="."/> 

    <xsl:for-each select="$columns"> 
    <xsl:apply-templates select="$row/@*[local-name(.)=current()/@attr]" 
    mode="csv:map-value"/> 
    <xsl:if test="position() != last()"> 
     <xsl:value-of select="$delimiter"/> 
    </xsl:if> 
    </xsl:for-each> 

    <xsl:text>&#xa;</xsl:text> 

</xsl:template> 

<xsl:template match="@*" mode="map-value"> 
    <xsl:value-of select="."/> 
</xsl:template> 

</xsl:stylesheet> 

type my.xsl 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:csv="http://www.ora.com/XSLTCookbook/namespaces/csv"> 

<xsl:import href="generic-attr-to-csv.xslt"/> 

<!--Defines the mapping from attributes to columns --> 
<xsl:variable name="columns" select="document('')/*/csv:column"/> 

<csv:column name="Name" attr="name"/> 
<csv:column name="Age" attr="age"/> 
<csv:column name="Gender" attr="sex"/> 
<csv:column name="Smoker" attr="smoker"/> 

<!-- Handle custom attribute mappings --> 

<xsl:template match="@sex" mode="csv:map-value"> 
    <xsl:choose> 
    <xsl:when test=".='m'">male</xsl:when> 
    <xsl:when test=".='f'">female</xsl:when> 
    <xsl:otherwise>error</xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

</xsl:stylesheet> 

using the apache xalan parser 

D:\Test>java org.apache.xalan.xslt.Process -in my.xml -xsl my.xsl -out my.csv 
[Fatal Error] generic-attr-to-csv.xslt:15:6: The value of attribute "select" associated with an element type "xsl:v 
alue-of" must not contain the '<' character. 
file:///D:/Test/generic-attr-to-csv.xslt; Line #15; Column #6; org.xml.sax.SAXParseException: The value of attribut 
e "select" associated with an element type "xsl:value-of" must not contain the '<' character. 

java.lang.NullPointerException 
     at org.apache.xalan.transformer.TransformerImpl.createSerializationHandler(TransformerImpl.java:1171) 
     at org.apache.xalan.transformer.TransformerImpl.createSerializationHandler(TransformerImpl.java:1060) 
     at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1268) 
     at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1251) 
     at org.apache.xalan.xslt.Process.main(Process.java:1048) 
Exception in thread "main" java.lang.RuntimeException 
     at org.apache.xalan.xslt.Process.doExit(Process.java:1155) 
     at org.apache.xalan.xslt.Process.main(Process.java:1128) 

Любые идеи, что я делаю неправильно

ответ

1

Ошибка в строке 15 очевидна:

<xsl:value-of select="$delimiter/> 

Там не является исходным " характер, но не заканчивается " характер. Это даже не хорошо сформированный XML-документ.

Решение: заменить строку, которая является ошибкой с:

<xsl:value-of select="$delimiter"/> 

Примечание, что теперь о том, " имеет согласование окончание ".

+1

LOL, я знал, что искать, но мои глаза все время проходили мимо. – ChaosPandion

+0

Dimitre у вас острые глаза –

+0

@ Liza-dawson: Добро пожаловать –

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