3 votes

Essayer de lire un fichier xml avec des attributs dupliqués

Le fichier que j'essaie de lire est un logiciel ancien qui n'est plus pris en charge, et j'essaie d'extraire les données via l'option de format XML qu'il offre et de les porter sur une version plus récente que je suis en train de construire en Java. Le problème que je rencontre et pour lequel je ne trouve pas de solution est que l'un des éléments a des attributs en double avec des données différentes.

Je sais que je pourrais construire mon propre analyseur (et je crains de devoir le faire en partie ou en totalité), mais je préfère ne pas le faire, car cela revient à réinventer la roue pour un seul et unique morceau. Est-ce que je peux le forcer à lire autour des données ? Par exemple, changer le nom de la deuxième balise en "attribut1" ? Ou puis-je simplement ignorer la deuxième balise ? Peut-être marier les deux éléments de données ensemble comme "part1/part2" ? Les données ne sont pas importantes, mais elles pourraient manquer à certains utilisateurs, et moins je donne de raisons de rester avec l'ancien système, mieux c'est.

Idéalement, j'aimerais pouvoir renvoyer les données au programme d'origine pour ceux qui ne veulent pas changer, donc toute option permettant de conserver les mêmes données serait la meilleure.

Je vous remercie pour le temps que vous m'avez accordé.

1voto

forty-two Points 7318

Vous pouvez utiliser TagSoup . Il dispose d'un XMLReader qui accepte presque tout ce que vous lui proposez. Dans ce cas, je pense qu'il se contentera d'abandonner silencieusement l'un des attributs.

Vous pouvez utiliser le XMLReader en l'état, ainsi qu'un fichier JAXP SAXParser ou avec JDOM ou DOM4J.

1voto

Gunther Points 3492

TagSoup est la voie à suivre, comme l'a déjà proposé quarante-deux, et je suis surpris que vous n'ayez pas réussi à le faire fonctionner.

Voici un lien vers le téléchargement : http://ccil.org/~cowan/XML/tagsoup/

Et voici un exemple complet (utilisant JDOM2). La sortie montre que la première occurrence de l'attribut a a disparu du résultat.

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

public class ParseDuplicateAttributeWithTagSoup
{
  public static void main(String[] args) throws Exception
  {
    String nonWellformed = "<?xml version='1.0' encoding='UTF-8'?><x a='1' a='2'/>";
    InputStream is = new ByteArrayInputStream(nonWellformed.getBytes("UTF-8"));
    SAXBuilder parser = new SAXBuilder("org.ccil.cowan.tagsoup.Parser");
    Document doc = parser.build(is);
    new XMLOutputter().output(doc, System.out);
  }
}

-1voto

dinesh707 Points 1849

Vous pouvez utiliser : http://www.jdom.org/docs/apidocs/org/jdom2/Element.html#getAttributes%28%29

L'objet Attribute contiendra la clé et la valeur recherchées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X