Avatar billede mercutio Nybegynder
16. marts 2003 - 10:56 Der er 24 kommentarer og
1 løsning

En kickass stringTokenizer....

Hvis jeg nu har noget html som jeg skal lave om i et java program.

feks.
<tr>
<td>col1</td>
<td>col2</td>
<td>col3</td>
<td>col4</td>
</tr>
<tr>
<td>tekst i første række under col1</td>
<td>tekst i første række under col2</td>
<td>tekst i første række under col3</td>
<td>tekst i første række under col4</td>
</tr>
<tr>
<td>tekst i anden række under col1</td>
<td>tekst i anden række under col2</td>
<td>tekst i anden række under col3</td>
<td>tekst i anden række under col4</td>
</tr>

det skal laves om så den sidste <td></td> ryger ned i en ny <tr><td rowspan=3></td>
Så det her

<tr>
<td>tekst i anden række under col1</td>
<td>tekst i anden række under col2</td>
<td>tekst i anden række under col3</td>
<td>tekst i anden række under col4</td>
</tr>

kommer til at se sådan ud

<tr>
<td>tekst i anden række under col1</td>
<td>tekst i anden række under col2</td>
<td>tekst i anden række under col3</td>
</tr>
<tr>
<td rowspan=3>Lang tekst der skal flyttes ned i næste linie</td>
</tr>

Hvordan gør man det nemmest og har i noget kode er det jo endnu bedre =)
Problemet er at det er inden i en tabel som er inden i en tabel plus jeg ved ikke hvor mange linier der kommer til at være ialt... Jeg er bare lidt på bar bund så alle ideer er velkomne.
Avatar billede magoo20000 Nybegynder
16. marts 2003 - 12:49 #1
Det lyder mere som om du er ude i noget xml med xsd skemaer.
Avatar billede arne_v Ekspert
16. marts 2003 - 14:59 #2
Hvis du bruger XHTML 1.0, så er det relativt nemt at lave en SAX
parser der laver den konvertering.

[og jeg kan endda godt skrive noget til dig !]

Hvis det er "HTML der ser OK ud i Internet Explorer", så er du lidt
på herrens mark.

Det kritiske er vel om du nemt kan identificere det pågældende
linier.

Hvis du kan det så må det være muligt at strikke noget sammen a la:

open input file
open output file
while more lines in input file {
    read line from input file
    if line matches criteria {
        write 3 modified line sto output file
    } else {
        write line unchanged to output file
    }
}
Avatar billede arne_v Ekspert
16. marts 2003 - 15:00 #3
magoo>

Hvor kommer skemaer ind i billedet ?
Avatar billede magoo20000 Nybegynder
16. marts 2003 - 15:15 #4
Det var mere en ide jeg kom på - Hvis man nu forestillede sig, at der blev sendt noget xml, som der skulle have en bestemt form ville det være en ide at validere det op imod et xsd skema. Du har ret i, at i forhold til spørgsmålet er det måske et long shot :-)
Avatar billede arne_v Ekspert
16. marts 2003 - 15:20 #5
Jeg kan godt se hvad du tænker.

Men det er ikke nødvendigt at validere dokumentet. Strengt tager
behøver det ikke engang at være validt - bare det er wellformed kan
vi parse det.
Avatar billede mercutio Nybegynder
16. marts 2003 - 21:44 #6
Hehe det er sådan at jeg i mit java program får en liste der ligger på en session listen er lavet til html når jeg får den og jeg skal så lige rette lidt i htmlen inden den bliver sendt tilbage til browseren.... Jeg behøves ikke identificere linierne det samme skal ske for hver linie sidste felt skal flyttes ned på ny linie med colspan=3 så den får samme længde som de tre felter i forige linie...
Avatar billede mercutio Nybegynder
16. marts 2003 - 21:45 #7
Det data jeg har at arbejde med er en streng med html i...
Avatar billede arne_v Ekspert
27. marts 2003 - 20:17 #8
mercutio>

Er du kommer videre med problemet ?
Avatar billede mercutio Nybegynder
27. marts 2003 - 22:06 #9
Nopes ikke endnu.
Avatar billede arne_v Ekspert
27. marts 2003 - 22:08 #10
Har du brug for ideer/kode-fragmenter ?
Avatar billede mercutio Nybegynder
27. marts 2003 - 22:11 #11
ja det er lige præcist det jeg søger. Har du forstået mit spørgsmål?
Avatar billede arne_v Ekspert
27. marts 2003 - 22:23 #12
Nej. Jeg er bange for ta jeg ikke helt har forstået det.

Er:

<tr>
<td>col1</td>
<td>col2</td>
<td>col3</td>
<td>col4</td>
</tr>
<tr>
<td>tekst i første række under col1</td>
<td>tekst i første række under col2</td>
<td>tekst i første række under col3</td>
<td>tekst i første række under col4</td>
</tr>
<tr>
<td>tekst i anden række under col1</td>
<td>tekst i anden række under col2</td>
<td>tekst i anden række under col3</td>
<td>tekst i anden række under col4</td>
</tr>

en komplet input fil ?
Avatar billede mercutio Nybegynder
27. marts 2003 - 22:26 #13
Komplet input fil?

Det er en streng jeg har. Den ligger på session og jeg hiver den ned i min servlet i servletten skal jeg så ændre den... Det lyder nok mystisk men jeg har en standard jeg skal følge og bliver derfor nød til at gøre det...
Avatar billede arne_v Ekspert
27. marts 2003 - 22:28 #14
Er det en komplet streng ?
Avatar billede arne_v Ekspert
27. marts 2003 - 22:30 #15
Er der linieskift i strengen ?
Avatar billede mercutio Nybegynder
27. marts 2003 - 22:31 #16
Nej... der vil normalt være mange flere rækker den øverste række vil altid være der men der kan så være mange rækker under den.
Avatar billede mercutio Nybegynder
27. marts 2003 - 22:32 #17
nej ingen linieskift.
Avatar billede arne_v Ekspert
27. marts 2003 - 22:40 #18
Første forsøg:

public class HtmlManip {

    public static void main(String[] args) {
        String s =
            "<tr>"
                + "<td>col1</td>"
                + "<td>col2</td>"
                + "<td>col3</td>"
                + "<td>col4</td>"
                + "</tr>"
                + "<tr>"
                + "<td>tekst i første række under col1</td>"
                + "<td>tekst i første række under col2</td>"
                + "<td>tekst i første række under col3</td>"
                + "</tr>"
                + "<tr>"
                + "<td>tekst i anden række under col1</td>"
                + "<td>tekst i anden række under col2</td>"
                + "<td>tekst i anden række under col3</td>"
                + "<td>tekst i anden række under col4</td>"
                + "</tr>";
                System.out.println(manip(s));
    }
    private static String manip(String s) {
        int ix = s.length() - 5;
        while(!s.substring(ix, ix + 5).equals("</td>")) ix--;
        int ix2 = ix;
        while(!s.substring(ix2, ix2 + 4).equals("<td>")) ix2--;
        return s.substring(0, ix2) +
              "</tr>" +
              "<tr>" +
              "<td rowspan=3>" +
              s.substring(ix2 + 4, ix) +
              "</td>" +
              "</tr>";
       
    }
}
Avatar billede arne_v Ekspert
27. marts 2003 - 22:41 #19
Det skal nok forbedres lidt, men det er da ihvertfald en ide.
Avatar billede arne_v Ekspert
27. marts 2003 - 22:42 #20
PS: Hvis det skal outputtes som HTML så synes jeg at der skulle sættes
nogen linie-skift ind. Browseren er ligeglad, men de mennesker der skal
debugge koden for at rette HTML til vil uden tvivl foretrække nogle
linieskift !
Avatar billede mercutio Nybegynder
27. marts 2003 - 23:01 #21
hvad mener du med linie skift?
Avatar billede arne_v Ekspert
27. marts 2003 - 23:09 #22
Normale linie-skift.

"Linie 1\nLinie 2\n"

Med den nævnte pointe at når HTML'en engang ender ude i en browser
og der er et eller andet der ser forkert ud og en eller anden
bruger "View Source", så er det altså rart med nogle linie-skift.
Avatar billede mercutio Nybegynder
27. marts 2003 - 23:10 #23
ahh ok. Jeg vil prøve din ide i morgen. Jeg oplever godt nok noget mystisk lige nu. Kender du til visual age for java?
Avatar billede arne_v Ekspert
27. marts 2003 - 23:16 #24
Meget lidt.

I det firma jeg arbejder for brugte vi VAJ 3.5 men skiftede til JBuilder fordi
programmørene brød sig ikke om VAJ.

Men spørg.

Måske er der en anden som ved noget.
Avatar billede mercutio Nybegynder
27. marts 2003 - 23:17 #25
Jeg opretter lige et nyt spørgsmål så.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester