28. marts 2003 - 09:39
Der er
7 kommentarer og 2 løsninger
Fjern tags / konverter tags
Hvordan kan man konvertere disse tags på nemmeste måde ? <font color="#a020f0"> skal blive til <span class="foo"> <font color="#2e8b57"> skal blive til <span class="bar"> </font> skal blive til </span> Samt <b> og </b> skal fjernes helt. Eksempel: <pre> <font color="#a020f0">#include </font><font color="#ff00ff"><windows.h></font> <font color="#2e8b57"><b>int</b></font> main(<font color="#2e8b57"><b>int</b></font> argc, <font color="#2e8b57"><b>char</b></font> **argv) { <font color="#0000ff">//test af comment</font> MessageBox(<font color="#ff00ff">NULL</font>, <font color="#ff00ff">"test"</font>, <font color="#ff00ff">"test"</font>, MB_OK); <font color="#804040"><b>return</b></font> <font color="#ff00ff">0</font>; } </pre> Et stykke eksempelkode ville være godt - men hints til hvilke klasser der kan bruges er også ok.
Annonceindlæg tema
28. marts 2003 - 09:45
#1
Umiddelbart ligner dit HTML valid XML. Så en SAX parser burde kunne lave konverteringen.
28. marts 2003 - 09:45
#2
Skal jeg prøve at lave et lille eksempel ?
28. marts 2003 - 09:48
#3
Alternativt kan du selvfølgelig også bare loope gennem teksten og finde taggene. Hvis du kun skal lave den ene ændring så var det måske alligevel nemmest.
28. marts 2003 - 09:48
#4
Lav search and replace på det, ingen grund til at rode med XML parsere osv. for dette.
28. marts 2003 - 09:49
#5
Ja, koden vil være well-formed xml. Jeg vil da gerne se et sax eksempel :-)
28. marts 2003 - 10:01
#6
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class HtmlC { public static void main(String[] args) { try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(new MySaxParser()); xr.parse("C:\\c.xml"); } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class MySaxParser extends DefaultHandler { public MySaxParser() { } public void characters(char buf[], int offset, int len) throws SAXException { System.out.print(new String(buf, offset, len)); return; } public void startElement( String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException { if (rawName.equals("font")) { System.out.print("<span class=\"?\">"); } else if (rawName.equals("b")) { // nothing } else { System.out.print("<" + rawName); for(int i = 0; i < atts.getLength(); i++) { System.out.print(" " + atts.getLocalName(i) + "=\""+ atts.getValue(i) + "\""); } System.out.print(">"); } return; } public void endElement( String namespaceURI, String localName, String rawName) throws SAXException { if (rawName.equals("font")) { System.out.print("</span>"); } else if (rawName.equals("b")) { // nothing } else { System.out.print("</" + rawName + ">"); } return; } } giver følgende output: <pre> <span class="?">#include </span><span class="?"><windows.h></span> <span class="?">int</span> main(<span class="?">int</span> argc, <span class="?">char</span> **argv) { <span class="?">//test af comment</span> MessageBox(<span class="?">NULL</span>, <span class="?">"test"</span>, <span class="?">"test"</span>, MB_OK); <span class="?">return</span> <span class="?">0</span>; } </pre> og det begynder vel at ligne lidt. Jeg har ikke helt gennesmuet hvordan værdien af class attribut skal findes.
28. marts 2003 - 10:44
#7
color="#a020f0" = class="syntaxInclude" color="#ff00ff" = class="syntaxValue" color="#2e8b57" = class="syntaxDatatype" color="#0000ff" = class="syntaxComment" color="#804040" = class="syntaxReservedWord"
28. marts 2003 - 10:57
#8
Og så sætter man bare checks ind her: if(rawName.equals("font")) { if(atts.getValue("color").equals("#a020f0")) { System.out.print("<span class=\"syntaxInclude\">"); } System.out.print("<span class=\"?\">"); } ?
28. marts 2003 - 10:58
#9
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class HtmlC { public static void main(String[] args) { try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(new MySaxParser()); xr.parse("C:\\c.xml"); } catch (FactoryConfigurationError e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class MySaxParser extends DefaultHandler { public MySaxParser() { } public void characters(char buf[], int offset, int len) throws SAXException { System.out.print(new String(buf, offset, len)); return; } public void startElement( String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException { if (rawName.equals("font")) { System.out.print("<span class=\"" + colorToClass(atts.getValue("color")) + "\">"); } else if (rawName.equals("b")) { // nothing } else { System.out.print("<" + rawName); for(int i = 0; i < atts.getLength(); i++) { System.out.print(" " + atts.getLocalName(i) + "=\""+ atts.getValue(i) + "\""); } System.out.print(">"); } return; } public void endElement( String namespaceURI, String localName, String rawName) throws SAXException { if (rawName.equals("font")) { System.out.print("</span>"); } else if (rawName.equals("b")) { // nothing } else { System.out.print("</" + rawName + ">"); } return; } private static String colorToClass(String color) { if(color.equals("#a020f0")) return "syntaxInclude"; if(color.equals("#ff00ff")) return "syntaxValue"; if(color.equals("#2e8b57")) return "syntaxDatatype"; if(color.equals("#0000ff")) return "syntaxComment"; if(color.equals("#804040")) return "syntaxReservedWord"; return "?"; } } giver: <pre> <span class="syntaxInclude">#include </span><span class="syntaxValue"><windows.h></span> <span class="syntaxDatatype">int</span> main(<span class="syntaxDatatype">int</span> argc, <span class="syntaxDatatype">char</span> **argv) { <span class="syntaxComment">//test af comment</span> MessageBox(<span class="syntaxValue">NULL</span>, <span class="syntaxValue">"test"</span>, <span class="syntaxValue">"test"</span>, MB_OK); <span class="syntaxReservedWord">return</span> <span class="syntaxValue">0</span>; } </pre>
Kurser inden for grundlæggende programmering