xml - validate - XSLT Transform non funziona finché non rimuovo il nodo principale




xslt tutorial (2)

Ci sono 2 errori nella tua XSL:

  1. <xsl:value-of select="FcstPeriods/Period/Paragraph"/> non selezionerà mai nulla perché <RegionalFcst> e tutti i suoi elementi figlio sono xmlns="www.metoffice.gov.uk/xml/metoRegionalFcst" ( xmlns="www.metoffice.gov.uk/xml/metoRegionalFcst" ).
  2. <xsl:template match="/"> non corrisponderà a <RegionalFcst> ma corrisponderà al suo genitore, l'elemento (invisibile) del documento. <RegionalFcst> è il primo e unico figlio di / .

Affinché la tua XSL funzioni correttamente, dovrebbe apparire così:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <xsl:value-of select="*[local-name()='RegionalFcst']/*[local-name()='FcstPeriods']/*[local-name()='Period']/*[local-name()='Paragraph']"/>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Sto cercando di estrarre il titolo dall'XML seguente dal servizio web Met Office usando XSLT, tuttavia la mia selezione XSLT ritorna vuota.

FONTE:

<RegionalFcst xmlns="www.metoffice.gov.uk/xml/metoRegionalFcst" createdOn="2016-01-13T02:14:39" issuedAt="2016-01-13T04:00:00" regionId="se">
 <FcstPeriods>
  <Period id="day1to2">
   <Paragraph title="Headline:">Frosty start. Bright or sunny day.</Paragraph>
   <Paragraph title="Today:">A clear and frosty start in west, but cloudier in Kent with isolated showers. Then dry with sunny periods. Increasing cloud in west later will bring coastal showers with freshening southerly winds. Chilly inland, but less cold near coasts. Maximum Temperature 8C.</Paragraph>
  </Period>
 </FcstPeriods>
</RegionalFcst>

La mia XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
   <xsl:value-of select="FcstPeriods/Period/Paragraph"/>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Ho cambiato il root in / RegionalFcst e ho provato altri cambiamenti simili, come l'aggiunta di una barra iniziale prima di FcstPeriods, ma nulla funziona finché non rimuovo la prima e l'ultima riga dall'XML di origine, quindi funziona perfettamente.

Questo va bene nei test, ma ovviamente voglio usare il servizio web fornito da Met Office ed è così che lo presentano.

Qualche idea?


Di seguito è riportato il semplice cambiamento necessario nel tuo xsl.

from: <xsl:value-of select="FcstPeriods/Period/Paragraph"/>

a: <xsl:value-of select="//*:FcstPeriods/*:Period/*:Paragraph"/>







xslt