[Bielefeld-pm] XML parsen...

Cord Beermann cord at Wunder-Nett.org
Fr Aug 24 01:59:20 PDT 2007


Hallo!

Ich versuche gerade eine xml-Datei einzulesen, Format:

---------------------------------------------------------------------------
<oc11xml version="1.1" date="2007-08-23 17:27:17" since="2007-01-01 00:00:00">
        <cache>
                <id id="103013" node="1">E1B384F9-C7AD-09DF-95D6-0523683E4C82</id>
		<name><![CDATA[Lupfen]]></name>
		<waypoints gccom="GCGQ6G" nccom="N01082" oc="OC0ED3" />
	</cache>
	<cache>
		<id id="103014" node="1">35D59600-93C5-C4B6-05AF-18A09D6CDB4D</id>
		<name><![CDATA[Udilhild´s Heiratsgut]]></name>
		<waypoints gccom="GCGQ6V" nccom="N01085" oc="OC0ED4" />
	</cache>
</oc11xml>
---------------------------------------------------------------------------

Beispiel für Aufbau, <name></name> ist nicht eindeutig. Die
eigentliche Datei enthält etwa 10000 Datensätze.

dafür benutze ich XML::Simple:

---------------------------------------------------------------------------
#!/usr/bin/perl -w

use XML::Simple;

$xml = new XML::Simple;

$data = $xml->XMLin("$ARGV[0]", ForceArray => 0 );

foreach $name (keys %{$data->{cache}} ) {
  print $data->{cache}{$name}{waypoints}{oc} . "\n";
}
---------------------------------------------------------------------------
Relevanter Teilcode.


Damit habe ich <name> als 'Handle' um auf die anderen Werte zugreifen
zu könnnen. Da aber <name> eben nicht eindeutig wirft mir perl
Fehlermeldungen aus:

Warning: <cache> element has non-unique value in 'name' key attribute:
	HCC  at /home/cord/bin/gps-import-ocxml line 33

wie mache ich, das ich die unique-ids in 'waypoints => oc' oder 
'id => id' als Handles bekomme?

Vielen Dank,
	Cord