[java] html in xml uitlezen

Pagina: 1
Acties:

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Ik lees de volgende remote file:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" ?> 
<data>
  <veld GgvTypIdt="5" VryVldIdt="106" VldTypIdt="2" VlgNum="9" RepVlgNum="1" AdrPst="0">
    <Nam>Bijzonderheden</Nam>
    <Lbl>Bijzonderheden</Lbl>
    <LblLay>1</LblLay>
    <ToeLay>O</ToeLay>
    <VldLay>O</VldLay>
    <WrdLay>N</WrdLay>
    <WrdBld>0</WrdBld>
    <WrdIta>0</WrdIta>
    <Txt>
      <span>
        <table class="noborder" width="100%">
          <tbody>
            <tr>
              <td>Secretaris</td>
              <td>vervangen </td>
            </tr>
            <tr>
              <td> </td>
              <td> </td>
            </tr>
           </tbody>
        </table>
      </span>
    </Txt>
  </veld>
  ...
</data>

als volgt in:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// filename is juist
URL url = new URL( filename );
URLConnection conn = url.openConnection( );
conn.setUseCaches( false );

DataInputStream in = new DataInputStream( conn.getInputStream( ) );

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance( );
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder( );
contentItem = docBuilder.parse( in );

in.close( );

...

Element root = contentItem.getDocumentElement( );

NodeList fieldList = root.getElementsByTagName( "veld" );

for ( int i = 0; i < fieldList.getLength( ); i++ )
{
    Element fieldNode = (Element)fieldList.item( i );

    ....

    NodeList fieldLabelList = fieldNode.getElementsByTagName( "Lbl" );
    Element fieldLabelElement = (Element)fieldLabelList.item( 0 );
    NodeList fieldLabelText = fieldLabelElement.getChildNodes( );

    NodeList fieldTxtList = fieldNode.getElementsByTagName( "Txt" );
    Element fieldTxtElement = (Element)fieldTxtList.item( 0 );
    NodeList fieldTxtText = fieldTxtElement.getChildNodes( );

    System.out.println( ( (Node)fieldTxtText.item( 0 ) ).getNodeValue( ).trim( ) ) + " = " + ( (Node)fieldTxtText.item( 0 ) ).getNodeValue( ).trim( ) ) );

    ....
}


Het is me uiteraard duidelijk dat ie de html tags als xml ziet en een fout genereert, omdat ik het gehele Txt blok als tekst probeer te lezen.
Ik kan aan het xml bestand dus niks zelf meer veranderen. Ik heb wel oplossingen gevonden, maar die sloegen niet exact op mijn probleem, b.v. deze.

Nu heb ik ook iets gevonden over entity resolvers, maar hier kan ik niet echt over vinden of deze voor mijn probleem bruikbaar zijn. Weet iemand hoe ik dit binnen mijn Java code kan oplossen?

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Omdat HTML vaak geen valide XML is kun je de Node onder het Txt-element als node van het type DocumentFragment uitlezen.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
sorry maar ik heb niet idee dat deze mijn probleem oplost als de java doc mag geloven
heb je ergens informatie over een toepassing hiervan?

  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
Het is mogelijk om het HTML deel te omvatten met een <[[CDATA section. Dan wordt dit als normale tekst behandeld en kan je deze in één slag inlezen.

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Daarvan ben ik op de hoogte, maar is dat ook mogelijk om dat bij een externe file te doen naderhand in java? had het er dan al niet eigenlijk in moeten staan? Dit is het bestand en gaat om het gedeelte onder bijzonderheden: xml bestand

[ Voor 2% gewijzigd door Krooswijk.com op 23-05-2006 08:47 . Reden: foute link ]


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je kunt het bestand toch wel bufferen en wat replaces doen met <[[CDATA[ :)

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
voor diegene die nog geinteresseerd ik heb het op kunnen lossen met de zeer handige java library nanoxml, waar je van elke node de toString kan opvragen en wegschrijven...

  • r5d
  • Registratie: Februari 2002
  • Niet online

r5d

Read more, write less...

Misschien mis ik wat, maar is de HTML code in je XML file niet gewoon ook well-formed XML :? Je parser zou er dan namelijk niet over moeten vallen.


Of heb je toevallig in dit voorbeeld well-formed (X)HTML gezet terwijl dit niet altijd het geval is? Dan zou ik namelijk voor de CDATA oplossing kiezen OF mijn HTML naar XHTML omzetten.


Edit: voortaan beter lezen, je wilt je HTML dus niet als XML behandelen, wat nu wel het geval is.. :7
Laat maar dus...

[ Voor 15% gewijzigd door r5d op 23-05-2006 23:31 ]

Later betaal je meer, maar dan heb je wel een gratis datalimiet....


  • momania
  • Registratie: Mei 2000
  • Laatst online: 20:11

momania

iPhone 30! Bam!

kan je dit ook niet gewoon makkelijk met de digester lezen?

Neem je whisky mee, is het te weinig... *zucht*


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Heeft er iemand ervaring mee met nanoxml-lite ? ik loop tegen het probleem aan de parser niet overweg kan met lege nodes als deze <node />.
Daarom worden sommige file niet goed geparst.
Pagina: 1