Question

Il y a un comportement étrange dans l'analyse syntaxique KML produit par Google Earth en utilisant un analyseur compatible, JAK . L'espace de noms attendu par l'analyseur n'est pas écrit comme correct par le système de production GE et Kml lors de la lecture de cette KML de nouveau dans une autre validation d'applications Java échoue.

Nous tripoter le flux comme il est lu et le remplacement occurences de tout autre espace de noms avec l'espace de noms approprié. Cela ne doit être fait une fois près du début du fichier. L'approche a été tenté d'analyser dans les premières lignes à une chaîne, effectuez une recherche et de remplacement, créer stringstream et concaténer le « repos » du FileInputStream à l'aide d'un stringstream SequenceInputStream. Cela ne fonctionne pas. Toutes les idées seront appréciées.

Voici ce que le fragment xmlns KML commence par:

<code>
    <kml xmlns="http://earth.google.com/kml/2.2">
</code>

et voici ce que nous voulons remplacer par:

<code>
    <kml xmlns="http://www.opengis.net/kml/2.2">
</code>

Le flux de séquence retourne une valeur disponible défectueuse (uniquement pour le 1er flux dans la séquence) provoquant l'analyseur à l'échec.

Était-ce utile?

La solution

SequenceInputStream fonctionne de façon inhabituelle. Il relie les deux cours d'eau dans un flux virtuel. La méthode disponible () pour une SequenceInputStream retourne la longueur pour le flux de courant, pas tous les courants combinés comme on peut s'y attendre.

Au lieu d'un SequenceInputStream, vous devez utiliser un StringBuffer pour lire le fichier dans et apporter des modifications, vous devez, en tant que données sont lues. StringBuffer améliore les performances de l'ajout d'objets de chaîne. Parse la méthode StringBuffer.toString () à un stringstream si vous avez besoin d'une sortie de courant à la fin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top