J'ai écrit du code qui crée un fichier XML à partir de mes propriétés système dans java. Cela fonctionne exactement comme je le veux mais je n'aime vraiment pas vraiment comment j'ai fini par utiliser comme si 5 instructions pour le faire fonctionner puisque j'ai remarqué qu'aucune des propriétés ne va au-delà de 4 sous-chaînes délimitées de toute façon. Id préfère de loin utiliser un itérateur et une sorte de méthode hasNext() pour continuer à ajouter des éléments jusqu'à la fin de la chaîne mais je n'ai rien pu faire. Je ne pouvais pas trouver un moyen d'ajouter le tag le plus récent sur le dernier dans une boucle/ajouter la valeur à la fin des éléments.Tentative de création d'un fichier XML avec itérateur dans java
C'est ce que j'ai actuellement comme une solution rapide pour lancer le programme.
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("JAVA");
doc.appendChild(rootElement);
Iterator it = hm.entrySet().iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry) it.next();
String keyString = (String)entry.getKey();
String val = (String)entry.getValue();
java.util.List<String> sa = Arrays.asList(keyString.split("\\."));
Iterator ait = sa.iterator();
Element tag = doc.createElement((String) ait.next());
rootElement.appendChild(tag);
Element tag2 = null;
Element tag3 = null;
Element tag4 = null;
Element tag5 = null;
while(ait.hasNext())
{
if(ait.hasNext())
{
tag2 = doc.createElement((String)ait.next());
tag.appendChild(tag2);
if(!ait.hasNext())
tag2.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag3=doc.createElement((String)ait.next());
tag2.appendChild(tag3);
if(!ait.hasNext())
tag3.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag4=doc.createElement((String)ait.next());
tag3.appendChild(tag4);
if(!ait.hasNext())
tag4.appendChild(doc.createTextNode(val));
}
if(ait.hasNext())
{
tag5=doc.createElement((String)ait.next());
tag5.appendChild(tag5);
if(!ait.hasNext())
tag5.appendChild(doc.createTextNode(val));
}
}
}
Transformer transformer = null;
TransformerFactory transformerFactory = TransformerFactory.newInstance();
try
{
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("XMLtester"));
transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(source, result);
} catch (TransformerConfigurationException e)
{
e.printStackTrace();
} catch (TransformerException e)
{
e.printStackTrace();
}
catch(NullPointerException e)
{
System.out.println("ERROR: " + e.toString());
}
System.out.println("File saved!");
Si quelqu'un a des idées sur la façon de faire un peu plus souple ou élégant de manière à prendre dans un certain nombre d'id sous-chaînes délimitées apprécierais.
Pouvez-vous fournir l'entrée et la sortie par exemple. Merci. – Adam