Ja, det har att göra med namespace. Se http://www.w3schools.com/xml/xml_namespaces.asp
Men däremot måste det nog finnas en slut-tagg på Cell i båda fallen.
3 svar · 1 165 visningar · startad av KoTTeN
Ska med hjälp av XSLT formatera en fil från en kund så vi kan importera det i vår databas. Men jag har än så länge inte lyckats något bra. Ett utdrag ur kundens fil:
<[B]ss:[/B]Worksheet [B]ss:[/B]Name="Tabell1">
<Row [B]ss:[/B]Height="12.8409">
<Cell>
<Data [B]ss:[/B]Type="Number">13925</Data>
</Cell>
<Cell [B]ss:[/B]Index="7">
<Data [B]ss:[/B]Type="String">1 TMPK</Data>
</Cell>
</Row>
</[B]ss:[/B]Worksheet>
Notera det som är i fetstil, dvs. "ss:" före varje atributt. Är det giltiga att ha detta? Hur ska jag ex. få fram värdet ur "Name" från "Worksheet" när det är
"ss:" före?
Ja, det har att göra med namespace. Se http://www.w3schools.com/xml/xml_namespaces.asp
Men däremot måste det nog finnas en slut-tagg på Cell i båda fallen.
Tack för svaret! Det var jag som var lite snabb att skriva (glömde </code> - nu redigerat).
Hur gör jag för att med XSLT få fram "ss:Worksheet"? Jag har försökt med följande:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
[B]<xsl:template match="ss:Worksheet[@Name=Tabell]">[/B]
<html>
<body>
<h2>Test</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Kundnummer</th>
<th>Beställning</th>
</tr>
<xsl:for-each select="Row">
<tr>
<td><xsl:value-of select="Cell[1]/Data"/></td>
<td><xsl:value-of select="Cell[2]/Data"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Men får inget resultat alls.
Vad använder du för parser? Är den 2.0-kompatibel kan du gå direkt mot det lokala namnet:
<xsl:for-each select="//*[local-name() = 'Row']">
...
</xsl:for-each>
Om det är en 1.0-parser (typ alla webläsare) så får du peka mot rätt schema och namespace-deklaration. Det ser ut som en MS Office-genererad XML (Excel SpreadSheet), så kanske fungerar följande rakt av:
<xsl:stylesheet ... xmlns:os="urn:schemas-microsoft-com:office:spreadsheet">
<xsl:for-each select="//os:Row">
...
</xsl:for-each>
</xsl:stylesheet>