Kevin
Kevin

Reputation: 6833

XHTML to XML XSLT conversion

I am doing a very simple xslt to convert a html page to a xml file.

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 <topic> tag.

I did the following xslt:

 <xsl:template match="@*|node()">
   <xsl:copy>
    <xsl:apply-templates select="@*|node()"/> 
  </xsl:copy>  
 </xsl:template>

 <xsl:template match="/">
   <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="html">
  <topic>
    <xsl:text> Conversion Test</xsl:text>
  </topic>
 </xsl:template>

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.

The source html looks like:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>..</head>
   <body>...</body>
 </html>

Could experts help me a little here?

Upvotes: 3

Views: 4457

Answers (3)

Daniel Haley
Daniel Haley

Reputation: 52848

XSLT 1.0:

Try adding xmlns:x="http://www.w3.org/1999/xhtml" to your xsl:stylesheet and changing your match to match="x:html". (Note: you don't have to use "x"; you can choose anything you want.)

XSLT 2.0:

Either use the above method or replace the namespace prefix in your match(es) to "*" (match="*:html"). You could also add xpath-default-namespace="http://www.w3.org/1999/xhtml" to the xsl:stylesheet.

Upvotes: 5

Rob
Rob

Reputation: 15150

The purpose of XSLT is to transform XML documents into other XML documents. HTML is not a XML document. While XHTML is XML, it is actually HTML reformulated so I'm just not sure what you want to do is easy or possible with XSLT.

Upvotes: 0

Ludovic Kuty
Ludovic Kuty

Reputation: 4954

You may want to try to remove the first template or make it more specific than matching every node with node().

Upvotes: 0

Related Questions