webForumDet fria alternativet

Är detta en giltig XML-sträng?

XML

3 svar · 1 165 visningar · startad av KoTTeN

Medlem sedan sep. 20011 722 inlägg
Frågan#1

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?

Medlem sedan dec. 2010159 inlägg
#2

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.

Medlem sedan sep. 20011 722 inlägg
#3

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.

Medlem sedan mars 20007 896 inlägg
#4

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>
253 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)