XHTML naar XML XSLT-conversie

Ik ben bezig met een heel eenvoudige xslt om een ​​html-pagina naar een xml-bestand te converteren.

But it appears to me that the starting point is not that straightforward to me.My first goal is to convert a <html> tag into a tag.

Ik heb de volgende xslt gedaan:

 
   
     
    
 

 
   
 

 
  
     Conversion Test
  
 

However, now after I run this xslt, the result xml is purely of the same content of the original html page, it seems that the third template match that I wrote (to match the <html> tag) never gets hit.

De bron-HTML ziet er als volgt uit:


 
   <head>..</head>
   <body>...</body>
 </html>

Kunnen experts me hier een beetje helpen?

2
@DevNull, ik heb mijn vraag bijgewerkt met de bron html
toegevoegd de auteur Kevin, de bron
Kun je een voorbeeld van je html geven? (vooral eventuele naamruimten zoals xmlns = "http://www.w3.org/1999/xhtml" )
toegevoegd de auteur Daniel Haley, de bron
Bedankt. Goede vraag +1
toegevoegd de auteur Daniel Haley, de bron

3 antwoord

XSLT 1.0:

Probeer xmlns: x = "http://www.w3.org/1999/xhtml" toe te voegen aan uw xsl: stylesheet en uw match te wijzigen in match = "x: html" . (Opmerking: u hoeft "x" niet te gebruiken, u kunt alles kiezen dat u wilt.)

XSLT 2.0:

Gebruik de bovenstaande methode of vervang de naamruimteprefix in uw overeenkomst (en) in "*" ( match = "*: html" ). U kunt ook xpath-default-namespace = "http://www.w3.org/1999/xhtml" toevoegen aan de xsl: stylesheet .

4
toegevoegd
dank je, het werkte! Ja, de html is eigenlijk xhtml en ik gebruik XSLT1.0, nadat ik in je voorgestelde naamruimte heb gezet, werkte geweldig :)
toegevoegd de auteur Kevin, de bron
Ik heb de titel bijgewerkt om ook de aard van het brondocument weer te geven.
toegevoegd de auteur Kevin, de bron
@ Kevin - je bent van harte welkom. Als u de naamruimte in uw XML-uitvoer niet wilt, voegt u exclude-result-prefixes = "# all" toe aan xsl: stylesheet . (Opmerking: u kunt #all vervangen door x om x specifiek uit te sluiten.
toegevoegd de auteur Daniel Haley, de bron

Het doel van XSLT is om xml -documenten om te zetten in andere xml documenten. HTML is geen XML-document. Hoewel XHTML xml is, is het in feite HTML-herformuleerd, dus ik weet gewoon niet zeker wat je wilt doen, is gemakkelijk of mogelijk met XSLT.

0
toegevoegd
Dus NU update je de titel :). Dat geeft mijn probleem hiermee weer.
toegevoegd de auteur Rob, de bron

Misschien wilt u proberen de eerste sjabloon te verwijderen of specifieker te maken dan elke knoop te koppelen met node() .

0
toegevoegd
@lkuty, ik heb geprobeerd de eerste sjabloon te verwijderen. Nu is de resulterende xml gewoon een groot tekstknooppunt zonder enige opmaak. Het bevat alle tekst van de originele HTML-pagina.
toegevoegd de auteur Kevin, de bron
Wil je zeggen de identiteitstransformatie verwijderen?
toegevoegd de auteur Daniel Haley, de bron
Ik had het mis. Ik dacht dat de eerste regel zou kunnen worden gekozen als insted van de derde, maar in feite is de standaardprioriteit voor een overeenkomstpatroon met een element groter dan node() en dus zou het niet het probleem kunnen zijn. Ik dacht gewoon niet na over NS.
toegevoegd de auteur lkuty, de bron