Assigning auto-increment IDs to empty fields in a KML/XML file

Recently we were processing some KML files using OpenLayers and at some point we realised that some place-marks were not appearing on the map. After inspecting the debug console and the files more carefully we understood that OpenLayers did not like empty placemark IDs.

To mitigate the problem we wrote the following AWK script that will go over all lines in the KML/XML file, find the empty id fields (id="") and assign them with an auto-increment value. A note here, initially we just replaced all empty IDs with the same value but it seems that OpenLayers does not treat kindly conflicts on IDs and thus we had to go with an auto-increment solution.

# Assigning auto-increment IDs to the placemarkers as openlayers does not show conflicting-ID elements.
awk -i inplace '{
  for(x=1;x<=NF;x++) {
    if($x~/id=""/) {
      sub(/id=""/,"id=\"" (++i) "\"")
}1' "$output_path/$file_name";

Side notes

In case you already have some IDs defined, you would have to make your code a bit more complex… You would first need to find all filled IDs and then you would have two options:

  • empty them and execute the above script
  • or register them and make sure the script does not create conflicting IDs either by starting the variable i from a number greater than the biggest registered ID or making it even harder by filling in the gaps between the already registered IDs..

Create a graph out of an XML file

To create a graph out of an XML file, we used the yEd graph editor.
yEd is a desktop application that can be used to generate diagrams. It is free of charge (not FOSS) and runs on all major platforms: Windows, Unix/Linux, and Mac OS X.

For the following demo we used the latest release for GNU/Linux that was available at the time (yEd-3.17.1).

Usage Example

  1. Download yEd
  2. Extract it
  3. Navigate into the generated folder (e.g. if you used the attached version then the folder will be yed-3.17.1)
  4. Start the application using a JRE. In our case the command to start it was: java -jar yed.jar
  5. Click on the Open option (or go to File > Open... )
  6. Navigate to the XML file that you want to graph and click Open
  7. In the pop-up window for the drop-down named XSL File for then select the option XML-Tree and click Ok
  8. By now you should have your graph available to view/edit/export