Como converter XML para XSL
estou a tentar converter um ficheiro xml para xslt
O Meu ficheiro xml é assim,
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="testxsl.xsl"?>
<doc>
<test>
<field name="id">c8b102</field>
<field name="created_at">2013-11-14T00:00:00Z</field>
<field name="userid">userfirst</field>
<field name="screenname">userfirst</field>
<field name="status">open</field>
<field name="contents">testing content</field>
<field name="sentiment">positive</field>
<field name="location">placename</field>
<field name="source">local</field>
<field name="url">test</field>
<field name="keyword">test</field>
</test>
<test>
<field name="id">c8b102</field>
<field name="created_at">2013-11-14T00:00:00Z</field>
<field name="userid">usersec</field>
<field name="screenname">usersec</field>
<field name="status">close</field>
<field name="contents">test sec</field>
<field name="sentiment">positive</field>
<field name="location">place</field>
<field name="source">local</field>
<field name="url">test</field>
<field name="keyword">test</field>
</test>
</doc>
escrevi um código xsl (testxsl.xsl) para transformação
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Complaints</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Created Date</th>
<th>UserID</th>
<th>Screenname</th>
<th>Status</th>
<th>Contents</th>
<th>Source</th>
<th>URL</th>
</tr>
<xsl:for-each select="doc/test">
<tr>
<td>
<xsl:value-of select="date" />
</td>
<td>
<xsl:value-of select="str[@name = 'userid']" />
</td>
<td>
<xsl:value-of select="str[@name='screenname']" />
</td>
<td>
<xsl:value-of select="str[@name='status']" />
</td>
<td>
<xsl:value-of select="str[@name='contents']" />
</td>
<td>
<xsl:value-of select="str[@name='source']" />
</td>
<td>
<xsl:value-of select="str[@name='url']" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
mas estou a obter apenas a parte do cabeçalho na saída com fronteiras e tudo como em baixo,
Created Date UserID Screenname Status Contents Source URL
não sei qual é o problema, o meu ficheiro xsl parece estar correcto
1
Author: user3136030, 2014-02-03
1 answers
Não existe nenhum elemento chamado date
no seu XML de entrada. Da mesma forma, os elementos dentro de test
não são chamados str
, mas field
.
O seu código XSLT deve, obviamente, corresponder aos elementos do seu XML de entrada.
Utilize a seguinte folha de estilo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Complaints</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Created Date</th>
<th>UserID</th>
<th>Screenname</th>
<th>Status</th>
<th>Contents</th>
<th>Source</th>
<th>URL</th>
</tr>
<xsl:for-each select="doc/test">
<tr>
<td>
<xsl:value-of select="field[@name='created_at']" />
</td>
<td>
<xsl:value-of select="field[@name = 'userid']" />
</td>
<td>
<xsl:value-of select="field[@name='screenname']" />
</td>
<td>
<xsl:value-of select="field[@name='status']" />
</td>
<td>
<xsl:value-of select="field[@name='contents']" />
</td>
<td>
<xsl:value-of select="field[@name='source']" />
</td>
<td>
<xsl:value-of select="field[@name='url']" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Resultado
<html>
<body>
<h2>Complaints</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Created Date</th>
<th>UserID</th>
<th>Screenname</th>
<th>Status</th>
<th>Contents</th>
<th>Source</th>
<th>URL</th>
</tr>
<tr>
<td>2013-11-14T00:00:00Z</td>
<td>userfirst</td>
<td>userfirst</td>
<td>open</td>
<td>testing content</td>
<td>local</td>
<td>test</td>
</tr>
<!--...-->
</table>
</body>
</html>
HTML renderizado
2
Author: Mathias Müller, 2014-02-03 11:21:06